microsoft / microsoft/TypeScript
Type widening for T or Promise<T>
Personne n'a encore pris cette issue.
- Langage dominant
- Go
- Étoiles
- 111k
- Forks
- 14.4k
- Merge moyen
- 1 j 19 h
- PR mergées (30 j)
- 117
Description
Bug Report
🔎 Search Terms
Type widening, promise, generic type widening.
🕗 Version & Regression Information
This is the behavior in every version I tried.
⏯ Playground Link
💻 Code
type Cb3 = <Res extends string | Promise<string>>(cb: () => Res) => Res
const c: Cb3 = {} as any;
// this don't widen the type, type of t31 is "1"
const t31 = c(() => {
return '1';
});
// but here is the problem, type of t32 is Promise<string>
const t32 = c(async () => {
return '1';
});
🙁 Actual behavior
Type of t32 is Promise<string>
🙂 Expected behavior
Type of t32 is Promise<"1">, by analogy with type of t31
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 le TypeScript Playground lié et comparez l’inférence des callbacks génériques dans les exemples synchrone et asynchrone. Suivez l’endroit où le cas Promise perd le type littéral ; le travail est terminé lorsque l’appel asynchrone est inféré comme Promise<"1"> tandis que le résultat synchrone reste inchangé.
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
- 35/100