microsoft / microsoft/TypeScript
Allow narrowing of unions discriminated by numeric literals using `>` `<` etc
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- Go
- Estrellas
- 111k
- Forks
- 14.3k
- Merge medio
- 2 d 4 h
- PR fusionados (30 d)
- 132
Descripción
🔎 Search Terms
"arguments length"
🕗 Version & Regression Information
It works the same in v3.3.3
⏯ Playground Link
💻 Code
Some basic ways to check if we have any arguments could be these:
function example1(...args: [number] | []) {
if (args.length > 0) {
return args[0];
} else {
return NaN;
}
}
function example2(...args: [number] | []) {
if (args.length) {
return args[0];
} else {
return NaN;
}
}
function example3(...args: [number] | []) {
if (args.length === 0) {
return NaN;
} else {
return args[0];
}
}
But TS doesn't seem to understand the first one.
🙁 Actual behavior
It doesn't understand the way it's done in "example1".
🙂 Expected behavior
It should understand the way it's done in "example1".
Additional information about the issue
Type inference on "args" after the check for "example1":
Type inference on "args" after the check for "example2":
Type inference on "args" after the check for "example3":
Notice how for "example2" and "example3" the type is correctly narrowed to just [number], but for "example1" the unnarowed [number] | [] type remains.
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
Usa los ejemplos vinculados de TypeScript Playground como punto de entrada; compara el estrechamiento del flujo de control para args.length > 0 con los casos existentes de valores truthy y de igualdad. Se considera terminado cuando example1 estrecha [number] | [] a [number] en la rama true sin perder el comportamiento mostrado por examples 2 y 3.
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
- Bien especificado
- Aptitud para principiantes
- 35/100