Incorrect type narrowing on union of `TypedDict`
Offen
Dieses Issue hat noch niemand übernommen.
bug
topic-type-narrowing
topic-typed-dict
- Vorherrschende Sprache
- Python
- Sterne
- 20.6k
- Forks
- 3.3k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
from typing import Any, TypedDict
class _SessionData(TypedDict):
created: int
session: dict[str, Any]
class _EmptyDict(TypedDict):
"""Empty dict for typing."""
SessionData = _SessionData | _EmptyDict
data: SessionData
reveal_type(data)
a = data if data else None
reveal_type(a)
aiohttp_session/__init__.py:56: note: Revealed type is "Union[TypedDict('aiohttp_session._SessionData', {'created': builtins.int, 'session': builtins.dict[builtins.str, Any]}), TypedDict('aiohttp_session._EmptyDict', {})]"
aiohttp_session/__init__.py:58: note: Revealed type is "Union[TypedDict('aiohttp_session._EmptyDict', {}), None]"
I also get the same result if I make it not data. The _SessionData type just disappears for no reason and it keeps saying the empty dict will be the result regardless of the boolean check.
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-Union-Beispiel auszuführen und die beiden aus aiohttp_session/init.py gemeldeten reveal_type-Ergebnisse zu überprüfen. Verfolge mypys boolesche Eingrenzung für die Union und stelle sicher, dass sowohl der nicht leere als auch der leere TypedDict-Zweig sowohl für data als auch für not data korrekt behandelt werden.
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
- Ruhig
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 45/100