[ty] Add precise inference for unpacking a TypeVar if the TypeVar has an upper bound with a precise tuple spec by AlexWaygood · Pull Request #19985 · astral-sh/ruff (original) (raw)
@dataclass
class Team[T: tuple[int, str]]:
employees: list[T]
def x[T: tuple[int, str]](team: Team[T]):
age, name = team.employees[0]
reveal_type(age) # revealed: int
reveal_type(name) # revealed: str
class Age(int): ...
class Name(str): ...
class Employee(NamedTuple):
age: Age
name: Name
EMPLOYEES: Final = (Employee(name=Name("alice"), age=Age(42)),)
team = Team(employees=list(EMPLOYEES))
reveal_type(team.employees) # revealed: list[Employee]
age, name = team.employees[0]
reveal_type(age) # revealed: Age
reveal_type(name) # revealed: Name