microsoft / microsoft/TypeScript
Allow narrowing generic type to single element of union type
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
It is a fairly common pattern to create a set of generic components, and then to use the generic component type within the system. Currently, typescript has an issue handling cases where some values of a generic component depend on others.
TypeScript Version: 2.4.0 / nightly (2.5.0-dev.201xxxxx)
2.4
Code
let index = {
a: {
arg: 'a',
fn: (a: string) => {a.toUpperCase()}
},
b: {
arg: 1,
fn: (b: number) => {b + 1}
}
}
let runFn= <K extends keyof (typeof index)>(key: K) => {
let i = index[key]
let arg = i.arg
let fn = i.fn
fn(arg) // Error: compiler doesn't understand that fn and arg will match
}
Expected behavior:
No error, since we know that arg and fn are pulled off of the same map entry.
Actual behavior:
Error: cannot invoke expression whose type lacks a call signature
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 reproduciendo el ejemplo proporcionado de TypeScript 2.4 y confirma el error al invocar fn(arg). Después, sigue la ruta de comprobación de tipos para el acceso indexado mediante una clave genérica y miembros de unión dependientes; se considera terminado cuando el ejemplo compila sin debilitar la seguridad de tipos.
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
- 5/5
- Tiempo estimado
- Más de una semana
- Estado de actividad
- Estancado
- Claridad
- Bastante claro
- Aptitud para principiantes
- 30/100