Allow use of `Required` and `NotRequired` to make an existing typed dict total or optional
Personne n'a encore pris cette issue.
- Langage dominant
- Python
- Étoiles
- 1.8k
- Forks
- 302
- Merge moyen
- 23 h
- PR mergées (30 j)
- 8
Description
I think the ability of indicating that a typed dict requires all keys or that all are optional would be very useful.
For example to allow defining default values for a particular dict or to return a dict that has been completely assigned from a function
A simple example
class A(TypedDict):
a: int
b: int
ADefault = {'a': 1, 'b': 42}
def optionalA(v: NotRequired[A]) -> A:
return ADefault | v
optionalA({'a': 11}) # ok since all keys of NotRequired[A] are optional
class X(TypedDict, total=False):
x: str
y: str
XDefault: X = {"x": "xv", "y": "yv"}
def withXDefault(v: X) -> Required[X]:
return XDefault | v
withXDefault({"x": "foo"})["y"] # ok since all keys of Required[X] are required
This idea is inspired by the analogous types in typescript Required and Partial that are in general very convenient.
I think it makes sense having the same behaviour of the typescript counterparts:
NotRequired[X]is a no op, since X is defined astotal=False. Same forRequired[A].Required/NotRequiredwould include all keys of the typed dict and all its superclasses. This differs from howtotalworks. Example:class TD1(TypedDict): a: int class TD2(TypedDict, total=False): b: int TDR = Required[TD2] # b becomes required TDNR = NotRequired[TD2] # a becomes not requiredRequired/NotRequiredused inline in the TypedDict are not taken into consideration, so the end result is the same independently of how the typed dict is defined
Guide de contribution
Aucun guide de contribution indexé pour ce dépôt
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par examiner la sémantique proposée de TypedDict, Required et NotRequired, ainsi que les exemples de l’issue, y compris l’héritage et les annotations inline. Définissez le comportement et identifiez la typing specification pertinente ainsi que les tests de conformité ; le travail est considéré comme terminé lorsque les transformations demandées sont spécifiées et validées de manière cohérente.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- python
- Domaine
- developer-experience
- Type d'issue
- Fonctionnalité
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 35/100