microsoft / microsoft/TypeScript
Reverse mapped type fails to be inferred with constraint that is a union containing an intersection
Offen
Dieses Issue hat noch niemand übernommen.
Domain: check: Type Inference
Possible Improvement
- Vorherrschende Sprache
- Go
- Sterne
- 111k
- Forks
- 14.4k
- Ø Merge
- 1 T. 19 Std.
- Gemergte PRs (30 T.)
- 117
Beschreibung
🔎 Search Terms
reverse mapped type inference inferred constraint union intersection
🕗 Version & Regression Information
- This is the behavior in every version I tried. However, I'd call this to only be a bug for recent 5.4 nightlies - this should only work since https://github.com/microsoft/TypeScript/pull/55811
⏯ Playground Link
💻 Code
declare function fn<T extends Record<string, number>>(obj: {
[K in (keyof T & "a") | "b"]: T[K];
}): T;
const obj = {
a: 42,
b: 100,
c: true,
};
const result = fn(obj);
🙁 Actual behavior
It fails to infer T and uses its constraint
🙂 Expected behavior
It should infer { a: number; b: number; }
Additional information about the issue
No response
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
Reproduziere das Verhalten mit dem verlinkten TypeScript Playground und dem bereitgestellten fn/object-Beispiel. Verfolge, warum die Inferenz für T auf seine Constraint zurückfällt; die Arbeit ist abgeschlossen, wenn result als { a: number; b: number; } statt als Constraint inferiert wird und ein Regressionstest das Beispiel abdeckt.
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