microsoft / microsoft/TypeScript
Inconsistent boolean literal types in objects
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- Go
- Estrellas
- 111k
- Forks
- 14.4k
- Merge medio
- 1 d 19 h
- PR fusionados (30 d)
- 117
Descripción
🔎 Search Terms
boolean invariant type parameter literal widen union
🕗 Version & Regression Information
- This is the behavior in every version I tried
⏯ Playground Link
💻 Code
// Box<T> type is invariant in T
type Box<T> = {
get: () => T;
set: (value: T) => void;
};
declare function box<T>(value: T): Box<T>;
const bn1 = box({ prop: 0 }); // Box<{ prop: number }>
const bn2: Box<{ prop: number }> = box({ prop: 0 }); // Ok
const bb1 = box({ prop: false }); // Box<{ prop: boolean }>
const bb2: Box<{ prop: boolean }> = box({ prop: false }); // Error, box<{ prop: false }> not assignable to Box<{ prop: boolean }>
🙁 Actual behavior
Error on bb2 is surprising and inconsistent with lack of error on bn2.
🙂 Expected behavior
Expected the box(false) expression to have type Box<boolean> for both bb1 and bb2.
Additional information about the issue
This issue is a small variation of https://github.com/microsoft/TypeScript/issues/48363 that was fixed by @ahejlsberg in https://github.com/microsoft/TypeScript/pull/48380
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 el TypeScript Playground enlazado y reproduce la diferencia entre los ejemplos de Box numérico y booleano. Rastrea el comportamiento de la inferencia de tipos y de la asignabilidad para la declaración invariante Box mostrada. Se considera terminado cuando los casos booleanos se comporten de forma coherente con los casos numéricos y exista cobertura de regresión para el ejemplo.
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