[Web API type definition issue] `exactOptionalPropertyTypes` makes working with most of the interfaces a nightmare
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 35/100
- Tipo de issue
- Error
- Claridad
- Bastante claro
- Estado de actividad
- Estancado
- Stack tecnológico
- typescript
Línea de trabajo
Empieza examinando el archivo lib.dom.d.ts generado y las definiciones del diccionario de Web API relacionadas con RequestInit, usando el ejemplo de Playground proporcionado con exactOptionalPropertyTypes habilitado. Se considera terminado cuando las propiedades opcionales de Web API acepten correctamente undefined cuando las reglas de Web IDL lo traten como una propiedad omitida, sin romper las definiciones generadas.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Summary
Optional fields in lib.dom.d.ts do not explicity have undefined in their types, which makes their construction needlessly difficult
Expected vs. Actual Behavior
Expected following code to just work:
function fetchUsers(params?: { signal?: AbortSignal | undefined }) {
return fetch("/api/v1/user/", { signal: params?.signal });
}
But instead the following error is shown:
Argument of type '{ signal: AbortSignal | undefined; }' is not assignable to parameter of type 'RequestInit' with 'exactOptionalPropertyTypes: true'. Consider adding 'undefined' to the types of the target's properties.
Types of property 'signal' are incompatible.
Type 'AbortSignal | undefined' is not assignable to type 'AbortSignal | null'.
Type 'undefined' is not assignable to type 'AbortSignal | null'. (2379)
Following is required to be done instead (let's pretend that RequestInit.signal cannot be set to null):
function fetchUsers(params?: { signal?: AbortSignal | undefined }) {
const init: RequestInit = {};
if (params?.signal) {
init.signal = params.signal;
}
return fetch("/api/v1/user/", init);
}
Playground Link
Browser Support
- This API is supported in at least two major browser engines (not two Chromium-based browsers).
Have Tried The Latest Releases
- This issue applies to the latest release of TypeScript.
- This issue applies to the latest release of
@types/web.
Additional Context
See https://webidl.spec.whatwg.org/#idl-dictionaries:
In the JavaScript binding, a value of undefined for the property corresponding to a dictionary member is treated the same as omitting that property.
I have not found a single | undefined on an optional interface field in the entire lib.dom.d.ts of Typescript 5.9.2.
- Lenguaje dominante
- TypeScript
- Estrellas
- 740
- Forks
- 474
- Merge medio
- 2 d 8 h
- PR fusionados (30 d)
- 15
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.
Más de microsoft/TypeScript-DOM-lib-generator
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
microsoft/TypeScript-DOM-lib-generator#2554 · 6 comentarios ·
-
lib.d.ts bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
-
lib.d.ts bug
Dificultad 1/5 Menos de una hora Aptitud para principiantes 68/100
microsoft/TypeScript-DOM-lib-generator#2154 · 1 reacción ·
-
lib.d.ts bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
microsoft/TypeScript-DOM-lib-generator#2107 · 5 comentarios ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
microsoft/TypeScript-DOM-lib-generator#1675 · 2 comentarios · 1 reacción ·
Todos los issues de microsoft/TypeScript-DOM-lib-generator
Issues similares
-
blocklist removal
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
MetaMask/eth-phishing-detect#296544 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
pastelsky/bundlephobia#1122 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
-
category/development priority/P2 scope/file-operations scope/testing type/enhancement
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
-
Enatega Customer and Rider app: Add-ons price is not visible to customer after order is placed. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100