I'd state this a bit differently. I think we shouldn't be afraid to introduce a keyword when we are introducing a new kind of "thing". But we should be wary of introducing any new "thing", especially if it's very similar to something that already exists in the language.
I think your
Any<...> suggestions fit nicely together. I have two concerns. First, the
Any<...> was discussed extensively as part of SE-0095 a while back, and at this point I don't think we should go back and change it. Second,
Opaque<...> wouldn't be a general-purpose type you could use anywhere: it is syntactically limited to result types, which makes
opaque feel (to me) more like a modifier on the result type than a full-fledged type in the type system.
type(of:) returns the underlying concrete type, at run time.