microsoft / microsoft/TypeScript
Allow narrowing generic type to single element of union type
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Go
- Sterne
- 111k
- Forks
- 14.4k
- Ø Merge
- 1 T. 19 Std.
- Gemergte PRs (30 T.)
- 117
Beschreibung
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
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginne damit, das bereitgestellte TypeScript-2.4-Beispiel zu reproduzieren, und bestätige den Fehler beim Aufruf von fn(arg). Verfolge dann den Typprüfpfad für den indizierten Zugriff über einen generischen Schlüssel und abhängige Union-Mitglieder; abgeschlossen ist die Aufgabe, wenn das Beispiel kompiliert, ohne die Typsicherheit zu schwächen.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- typescript
- Bereich
- compilers
- Issue-Typ
- Bug
- Schwierigkeit
- 5/5
- Geschätzter Aufwand
- Über eine Woche
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 30/100