microsoft / microsoft/TypeScript
Interface stop working after passing an optional function attribute
Ouverte
Personne n'a encore pris cette issue.
Bug
Domain: check: Type Inference
- Langage dominant
- Go
- Étoiles
- 111k
- Forks
- 14.4k
- Merge moyen
- 1 j 19 h
- PR mergées (30 j)
- 117
Description
Bug Report
🕗 Version & Regression Information
- This is the behavior in every version I tried.
⏯ Playground Link
Playground link with relevant code
💻 Code
interface Options<Self extends Options<Self>> {
attr1: Record<string, null>;
attr2: keyof Self["attr1"];
attr3?: (arg: any) => any;
}
function test<T extends Options<T>>(options: T) {
return options
}
test({
attr1: {
a: null,
},
attr2: "a", // here I got the expected auto-completion hint and the type is `a`.
});
test({
attr1: {
a: null,
},
attr2: "a", // here the type is `never` and a problem is caused
attr3: (arg) => arg,
});
🙁 Actual behavior
🙂 Expected behavior
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
Ouvrez le TypeScript Playground lié et comparez les deux appels à test<T extends Options> en utilisant l’interface récursive Options. Cherchez pourquoi l’ajout de attr3 optionnel fait passer attr2 de la clé inférée à never. Le travail est terminé lorsque les deux exemples conservent le type attr2 attendu et le comportement d’autocomplétion, avec l’ajout d’une couverture de régression dans la compiler test suite.
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