Allow `NotRequired[]` to be passed as a `TypeVar`
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 1.8k
- Forks
- 302
- Ø Merge
- 23 Std.
- Gemergte PRs (30 T.)
- 8
Beschreibung
I just found myself wanting to do the following:
from typing import TypedDict, NotRequired, Generic, TypeVar, Union, Never
_T = TypeVar('_T')
Foo = Union['FooSub1[_T]', 'FooSub2[_T]', 'FooSub3[_T]']
class BaseFoo(TypedDict, Generic[_T]):
bar: _T
class FooSub1(BaseFoo[_T]):
sub1: str
class FooSub2(BaseFoo[_T]):
sub2: str
class FooSub3(BaseFoo[_T]):
sub3: str
def foo(foo_with_bar: Foo[int]):
reveal_type(foo_with_bar) # Type of "foo_with_bar" is "FooSub1[int] | FooSub2[int] | FooSub3[int]"
def bar(foo_without_bar: Foo[NotRequired[Never]]): # error: "NotRequired" is not allowed in this context
pass
Mypy and Pyright both disallow NotRequired to be passed as a TypeVar. However the only way to avoid doing that would require me to duplicate all subclass definitions, which I am not willing to do because I have more than a dozen and so much duplication would make the code less maintainable.
Beitragsleitfaden
Für dieses Repository ist kein Beitragsleitfaden indexiert
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 mit dem Reproducer im Issue und vergleiche die aktuellen Regeln für NotRequired und TypeVar in mypy und Pyright, den beiden im Bericht genannten Checkern. Es sind keine Dateien oder Tests angegeben; abgeschlossen wäre die Arbeit erst mit einem abgestimmten Entwurf der Typisierungsregeln und dem entsprechenden Verhalten der Checker, ohne die TypedDict-Unterklassen zu duplizieren.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- python
- Bereich
- tooling
- Issue-Typ
- Feature
- Schwierigkeit
- 5/5
- Geschätzter Aufwand
- Über eine Woche
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 35/100