Allow use of `Required` and `NotRequired` to make an existing typed dict total or optional
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- Python
- Estrellas
- 1.8k
- Forks
- 302
- Merge medio
- 23 h
- PR fusionados (30 d)
- 8
Descripción
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
Guía de contribución
No hay ninguna guía de contribución indexada para este repositorio
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Comienza revisando la semántica propuesta de TypedDict, Required y NotRequired, así como los ejemplos del issue, incluida la herencia y las anotaciones inline. Define el comportamiento e identifica la typing specification relevante y las pruebas de conformidad; se considera terminado cuando las transformaciones solicitadas están especificadas y validadas de forma coherente.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- python
- Área
- developer-experience
- Tipo de issue
- Nueva funcionalidad
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Estado de actividad
- Estancado
- Claridad
- Bastante claro
- Aptitud para principiantes
- 35/100