microsoft / microsoft/TypeScript
Interface stop working after passing an optional function attribute
Offen
Dieses Issue hat noch niemand übernommen.
Bug
Domain: check: Type Inference
- Vorherrschende Sprache
- Go
- Sterne
- 111k
- Forks
- 14.3k
- Ø Merge
- 2 T. 4 Std.
- Gemergte PRs (30 T.)
- 132
Beschreibung
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
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Öffne den verlinkten TypeScript Playground und vergleiche die beiden Aufrufe von test<T extends Options> unter Verwendung des rekursiven Options-Interfaces. Untersuche, warum das Hinzufügen von optionalem attr3 attr2 vom inferierten Schlüssel zu never ändert. Als abgeschlossen gilt, dass beide Beispiele den erwarteten attr2-Typ und das Autovervollständigungsverhalten beibehalten und eine Regressionstestabdeckung in der compiler test suite hinzugefügt wird.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- typescript
- Bereich
- compilers
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 35/100