microsoft / microsoft/TypeScript
Continuing #17110 - Given generic `W extends { x: A }` should be able to use `keyof W['x']` to index w.x
Nessuno ha ancora preso questa issue.
- Lingua principale
- Go
- Stelle
- 111k
- Fork
- 14.3k
- Merge medio
- 2g 4h
- PR unite (30g)
- 132
Descrizione
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
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Inizia riproducendo l'esempio generico di indicizzazione con typescript@3.7.0-dev.20190831 o TypeScript@next, usando il Playground collegato e confrontando il comportamento previsto con quello effettivo. Leggi la issue correlata #17110 per comprendere il ragionamento esistente; il lavoro è completato quando l'accesso segnalato viene accettato senza introdurre una regressione nel caso di unione correlato.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- typescript
- Ambito
- compilers
- Tipo di issue
- Bug
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 35/100