microsoft / microsoft/TypeScript
Allow narrowing generic type to single element of union type
Personne n'a encore pris cette issue.
- Langage dominant
- Go
- Étoiles
- 111k
- Forks
- 14.3k
- Merge moyen
- 2 j 4 h
- PR mergées (30 j)
- 132
Description
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
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par reproduire l’exemple TypeScript 2.4 fourni et confirmez l’erreur lors de l’appel de fn(arg). Suivez ensuite le chemin de vérification des types pour l’accès indexé via une clé générique et des membres d’union dépendants ; le travail est terminé lorsque l’exemple se compile sans affaiblir la sûreté des types.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- typescript
- Domaine
- compilers
- Type d'issue
- Bug
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 30/100