microsoft / microsoft/TypeScript

Allow narrowing generic type to single element of union type

Abierto
#17,713 6 comentarios 5 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Awaiting More Feedback Suggestion
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

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. 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

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.