microsoft / microsoft/TypeScript
Inconsistent behaviour of `-?`
Abierto
Nadie ha tomado este issue todavía.
Bug
Domain: Mapped Types
Help Wanted
- Lenguaje dominante
- Go
- Estrellas
- 111k
- Forks
- 14.4k
- Merge medio
- 1 d 19 h
- PR fusionados (30 d)
- 117
Descripción
🔎 Search Terms
optional mapped type
🕗 Version & Regression Information
- This changed between versions 5.4.5 and 5.5.4
⏯ Playground Link
💻 Code
type OptionalToUnionWithUndefined<T> = {
[K in keyof T]: T extends Record<K, T[K]>
? T[K]
: T[K] | undefined
}
type Intermediate = OptionalToUnionWithUndefined<{ a?: string }> // { a?: string | undefined }
type Literal = { a?: string | undefined } // same type as Intermediate
type Res1 = Required<Intermediate> // { a: string }
type Res2 = Required<Literal> // { a: string | undefined }
🙁 Actual behavior
Res1 and Res2 are different types
🙂 Expected behavior
they should be the same because the inputs are
Additional information about the issue
This issue may share the cause with #59902
Guía de contribución
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 con la reproducción enlazada de TypeScript Playground usando exactOptionalPropertyTypes y compara Res1 con Res2 entre las versiones indicadas 5.4.5 y 5.5.4. Lee el issue relacionado #59902 para encontrar un posible contexto compartido; se considera terminado cuando las dos entradas equivalentes producen el mismo resultado Required y la regresión está cubierta.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- typescript
- Área
- compilers
- Tipo de issue
- Error
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Estado de actividad
- Estancado
- Claridad
- Bastante claro
- Aptitud para principiantes
- 35/100