[ty] Meta-type of type variables should be type[..] (#18439)

## Summary

Came across this while debugging some ecosystem changes in
https://github.com/astral-sh/ruff/pull/18347. I think the meta-type of a
typevar-annotated variable should be equal to `type`, not `<class
'object'>`.

## Test Plan

New Markdown tests.
This commit is contained in:
David Peter 2025-06-03 15:22:00 +02:00 committed by GitHub
parent 03f1f8e218
commit 0986edf427
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 20 additions and 1 deletions

View file

@ -766,4 +766,23 @@ def constrained[T: (Callable[[], int], Callable[[], str])](f: T):
reveal_type(f()) # revealed: int | str
```
## Meta-type
The meta-type of a typevar is the same as the meta-type of the upper bound, or the union of the
meta-types of the constraints:
```py
def normal[T](x: T):
reveal_type(type(x)) # revealed: type
def bound_object[T: object](x: T):
reveal_type(type(x)) # revealed: type
def bound_int[T: int](x: T):
reveal_type(type(x)) # revealed: type[int]
def constrained[T: (int, str)](x: T):
reveal_type(type(x)) # revealed: type[int] | type[str]
```
[pep 695]: https://peps.python.org/pep-0695/