microsoft / microsoft/TypeScript
overload + generic + infer breaks conditional types
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
TypeScript Version: 3.9.2, 4.0.0-beta (playground), 3.9.6, 3.9.7 (locally tested)
Search Terms: overload generic conditional
Code
type Wrap <T> = T & { wrap: T }
interface Data { id: number }
interface Foo {
<K extends keyof Data> (): Wrap<Pick<Data, K>>;
<K extends keyof Data> (): Wrap<Pick<Data, K>>;
}
type A = Foo extends (...args: any[]) => infer R ? 1 : 0;
type B = Foo extends (...args: any[]) => any ? 1 : 0;
declare let a: A, b: B;
a = b // Type '1' is not assignable to type '0'.(2322)
Expected behavior: compiles without error
Actual behavior: Type '1' is not assignable to type '0'
Playground Link: Link
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
Reproduisez l’exemple minimal dans le TypeScript Playground lié en utilisant les versions du compilateur indiquées, puis suivez la manière dont sont évalués la surcharge, l’inférence générique et le type conditionnel. Le travail est terminé lorsque l’exemple se compile sans l’erreur d’affectation signalée tout en conservant les résultats attendus pour A et B.
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