[ty] dataclasses.field support (#19140)

## Summary

Add an initial set of tests for `dataclasses.field`.
This commit is contained in:
David Peter 2025-07-09 09:18:08 +02:00 committed by GitHub
parent ab3af924ef
commit 68106dd631
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -0,0 +1,35 @@
# Dataclass fields
## Basic
```py
from dataclasses import dataclass, field
@dataclass
class Member:
name: str
role: str = field(default="user")
tag: str | None = field(default=None, init=False)
# TODO: this should not include the `tag` parameter, since it has `init=False` set
# revealed: (self: Member, name: str, role: str = Unknown, tag: str | None = Unknown) -> None
reveal_type(Member.__init__)
alice = Member(name="Alice", role="admin")
reveal_type(alice.role) # revealed: str
alice.role = "moderator"
# TODO: this should be an error, `tag` has `init=False`
bob = Member(name="Bob", tag="VIP")
```
## The `field` function
```py
from dataclasses import field
# TODO: this should be `Literal[1]`. This is currently blocked on enum support, because
# the `dataclasses.field` overloads make use of a `_MISSING_TYPE` enum, for which we
# infer a @Todo type, and therefore pick the wrong overload.
reveal_type(field(default=1)) # revealed: Unknown
```