[ty] Add generic inference for dataclasses (#18443)

## Summary

An issue seen here https://github.com/astral-sh/ty/issues/500

The `__init__` method of dataclasses had no inherited generic context,
so we could not infer the type of an instance from a constructor call
with generics

## Test Plan

Add tests to classes.md` in generics folder
This commit is contained in:
Matthew Mckee 2025-06-03 17:59:43 +01:00 committed by GitHub
parent 71d8a5da2a
commit e8ea40012a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 30 additions and 4 deletions

View file

@ -379,6 +379,21 @@ C[None](b"bytes") # error: [no-matching-overload]
C[None](12)
```
### Synthesized methods with dataclasses
```py
from dataclasses import dataclass
from typing import Generic, TypeVar
T = TypeVar("T")
@dataclass
class A(Generic[T]):
x: T
reveal_type(A(x=1)) # revealed: A[int]
```
## Generic subclass
When a generic subclass fills its superclass's type parameter with one of its own, the actual types

View file

@ -354,6 +354,18 @@ C[None](b"bytes") # error: [no-matching-overload]
C[None](12)
```
### Synthesized methods with dataclasses
```py
from dataclasses import dataclass
@dataclass
class A[T]:
x: T
reveal_type(A(x=1)) # revealed: A[int]
```
## Generic subclass
When a generic subclass fills its superclass's type parameter with one of its own, the actual types

View file

@ -134,9 +134,7 @@ class Property[T](NamedTuple):
name: str
value: T
# TODO: this should be supported (no error, revealed type of `Property[float]`)
# error: [invalid-argument-type]
reveal_type(Property("height", 3.4)) # revealed: Property[Unknown]
reveal_type(Property("height", 3.4)) # revealed: Property[float]
```
## Attributes on `NamedTuple`