microsoft / microsoft/TypeScript
Control flow analysis for dependent parameters only works when checking against literals
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
narrow, parameters, typeof
🕗 Version & Regression Information
It never worked for typeof / asserts checks since the feature introduction in https://github.com/microsoft/TypeScript/pull/47190; it's been mentioned here:
https://github.com/microsoft/TypeScript/pull/47190#issuecomment-1041216006
⏯ Playground Link
💻 Code
const fnLiteral: (...args: [`a`, number] | [`b`, string]) => void = (a, b) => {
if (a === "a") {
console.log(b);
// ^? number
}
}
const fnAssert: (...args: [`a`, number] | [`b`, string]) => void = (a, b) => {
if (isA(a)) {
console.log(b);
// ^? number | string
}
}
const fnTypeof: (...args: [number, number] | [string, string]) => void = (a, b) => {
if (typeof a === "number") {
console.log(b);
// ^? number | string
}
}
function isA(val: unknown): val is `a` {
return true;
}
🙁 Actual behavior
Both fnAssert and fnTypeof are unable to get TS to recognize b as its narrowed type (number). Only if a is checked against a literal does the narrowing works.
🙂 Expected behavior
The b parameter should be narrowed to number.
Additional information about the issue
No response
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
Empieza con la reproducción proporcionada en TypeScript Playground y el trabajo de control de flujo de PR #47190, comparando las comprobaciones literales con los casos de typeof y type-predicate. El issue está terminado cuando el parámetro dependiente b se estrecha a number tanto en fnAssert como en fnTypeof, coincidiendo con el comportamiento de la comprobación literal.
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