TypedDict.setdefault gives error when type is a TypeVar
Offen
Dieses Issue hat noch niemand übernommen.
bug
- Vorherrschende Sprache
- Python
- Sterne
- 20.6k
- Forks
- 3.3k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
Bug Report
When a function argument is annotated using a TypeVar with a bound that is a TypedDict, using setdefault on it leads to an error.
To Reproduce
from typing import TypedDict, TypeVar
class TD(TypedDict, total=False):
foo: int
bar: bool
_T = TypeVar("_T", bound=TD)
def func(td: _T) -> None:
td.setdefault("bar", True)
Actual Behavior
testit.py:10: error: Argument 1 to "setdefault" of "TypedDict" has incompatible type "str"; expected "Never" [arg-type]
Found 1 error in 1 file (checked 1 source file)
Your Environment
- Mypy version used: mypy 1.11.1 (compiled: yes)
- Mypy command-line flags: none
- Mypy configuration options from
mypy.ini(and other config files): no config file - Python version used: 3.12.3
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginne damit, das bereitgestellte TypedDict- und TypeVar-Beispiel mit mypy 1.11.1 auszuführen, und bestätige den falschen Never-Argumentfehler. Verfolge anschließend die Methodenprüfung für TypedDict-Werte, die an TypeVar gebunden sind, und füge einen Regressionstest hinzu, der zeigt, dass td.setdefault("bar", True) akzeptiert wird.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- python
- Bereich
- devtools
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 45/100