[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