microsoft / microsoft/TypeScript
Continuing #17110 - Given generic `W extends { x: A }` should be able to use `keyof W['x']` to index w.x
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- Go
- Estrellas
- 111k
- Forks
- 14.3k
- Merge medio
- 1 d 19 h
- PR fusionados (30 d)
- 117
Descripción
TypeScript Version: typescript@3.7.0-dev.20190831
Search Terms: tagged disjoint union generic
This issue stems from a question I asked on StackOverflow that @jcalz generously researched for me. I adapted his example to be a closer parallel to the example given in #17110.
Code
interface A { a: string; }
interface W {
x: A
}
function foo<W1 extends W>(w: W1, k: keyof W1['x']) {
w.x[k]; // Type 'keyof W1["x"]' cannot be used to index type 'A'.
const x: W1['x'] = w.x; // Okay
x[k] // Okay
}
Expected behavior:
Same as #17110. However, unlike #17110, W['x'] is only A instead of A | B | undefined. The explanation given as to why #17110 was not a bug was:
The constraint of
keyof W1["x"]iskeyof (A | B), which simplifies tokeyof A & keyof B, which isnever(because there are no common properties).
However, here keyof W1['x'] is keyof A which is not never.
Actual behavior:
Same as #17110.
Related Issues: #17110
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 reproduciendo el ejemplo genérico de indexación con typescript@3.7.0-dev.20190831 o TypeScript@next, usando el Playground enlazado y comparando el comportamiento esperado con el real. Lee el issue relacionado #17110 para conocer el razonamiento existente; se considera terminado cuando se acepta el acceso indicado sin introducir una regresión en el caso de unión relacionado.
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