Member predicate OptionalTypeExpr::getAnUnderlyingType
Repeatedly unfolds unions, intersections, parentheses, and nullability/readonly modifiers and gets any of the underlying types, or this type itself if it cannot be unfolded.
Note that this only unfolds the syntax of the type annotation. Type aliases are not followed to their definition.