microsoft / microsoft/TypeScript
Type inference with conditional for array fails for literal
Personne n'a encore pris cette issue.
- Langage dominant
- Go
- Étoiles
- 111k
- Forks
- 14.3k
- Merge moyen
- 1 j 19 h
- PR mergées (30 j)
- 117
Description
TypeScript Version: 3.9.2
Search Terms: typescript infer array type conditional literal
Code
function func<T>(opt: {
value: T;
arrayValue: T extends any[] ? T : T[];
}) {}
func({
value: [1, 2, 3],
arrayValue: [1, 2, 3],
}); // throws error
const obj = {
value: [1, 2, 3],
arrayValue: [1, 2, 3],
};
func(obj);
Expected behavior:
No error is thrown.
Actual behavior:
The commented function call throws the following error:
Type 'number[]' is not assignable to type 'number'.(2322)
input.ts(2, 3): The expected type comes from property 'value' which is declared here on type '{ value: number; arrayValue: number[]; }'
Related Issues:
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 générique de type conditionnel dans le TypeScript Playground lié, puis comparez l’appel direct avec l’appel utilisant obj. Suivez l’inférence de types et le traitement des types conditionnels concernés ; le travail est terminé lorsque l’appel direct ne produit aucune erreur tout en conservant les types de tableaux inférés attendus, avec un test de régression pour l’exemple.
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é
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 35/100