microsoft / microsoft/TypeScript

Type inference with conditional for array fails for literal

Ouverte
#39,162 1 commentaire 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Needs Investigation
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[]; }'

Playground Link: https://www.typescriptlang.org/play/#code/GYVwdgxgLglg9mABKSAeAKgPgBRwA5QBciA3gFCKIBuAhgDYgCmx6A3BYjQE5c0CeANXpMWiRgA8ojMABMAzpzB8A2gF1EAfkTpELNewC+ASlIGyZFBGzlKtBs0TKAjABpEAJjcBmVS47deQWEHZzdPRB8-Y3MIBDkoRDgAIwArRABeUg47EUdXD29ffx5+IXtiUIKIooN2C3ArZJSjdiA

Related Issues:

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. 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

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.