Dict unpacking fails when used for building TypedDict with required keys
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 20.6k
- Forks
- 3.3k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
Bug Report
When dict unpacking is used to dynamically add optional keys to a TypedDict, mypy raises a typeddict-item error.
As dict unpacking is used to fill some keys from the TypedDict, my understanding is that mypy could validate the unpacked dictionaries considering all keys as NotRequired, and only the final TypedDict respecting its formal definition.
To Reproduce
Gist: https://mypy-play.net/?mypy=latest&python=3.13&gist=b3377281f7f5a6f83dd9962d60302827
from typing import NotRequired, TypedDict
class Project(TypedDict):
name: str
version: NotRequired[str]
def build_project(name: str, version: str | None = None) -> Project:
return {
"name": name,
**({"version": version} if version is not None else {})
}
Actual Behavior
$ mypy .
main.py:12: error: Missing key "name" for TypedDict "Project" [typeddict-item]
Found 1 error in 1 file (checked 1 source file)
Your Environment
- Mypy version used:
1.17.0 - Mypy command-line flags: N/A
- Mypy configuration options from
mypy.ini(and other config files): N/A - Python version used:
3.13.5
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
Beginnen Sie mit der verlinkten mypy-play-Reproduktion und führen Sie das gezeigte Beispiel unter Python 3.13 aus. Lesen Sie die von diesem Fall erreichte Verarbeitung von TypedDict und dict-unpacking und fügen Sie anschließend einen Regressionstest für den gemeldeten Fehler hinzu. Erledigt ist die Aufgabe, wenn das Beispiel den erforderlichen Schlüssel "name" und das optional entpackte "version" ohne einen typeddict-item-Fehler akzeptiert.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- python
- Bereich
- tooling
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 45/100