microsoft / microsoft/TypeScript
Computed type key inference inconsistent with identical explicitly declared type
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Go
- Sterne
- 111k
- Forks
- 14.3k
- Ø Merge
- 1 T. 19 Std.
- Gemergte PRs (30 T.)
- 117
Beschreibung
🔎 Search Terms
keyof required keys key evaluation reduce getReducedType
🕗 Version & Regression Information
- This is the behavior in every version I tried
⏯ Playground Link
💻 Code
type distilled = distill<{
// ^?
foo: "default"
bar?: number
}>
// incorrectly inferred as unknown
type requiredDistilledKey = requiredKeyOf<distilled>
// ^?
// explicit declaration identical to hover of distilled
type declared = {
bar?: number
} & {
foo?: "default"
}
// now correctly inferred as never
type requiredDeclaredKey = requiredKeyOf<declared>
// ^?
type requiredKeyOf<o> = {
[k in keyof o]-?: o extends { [_ in k]-?: o[k] } ? k : never
}[keyof o]
type distill<t> = t extends object ? distillMappable<t> : t
type distillMappable<o> = {
[k in keyof o as k extends inferredDefaultKeyOf<o> ? never : k]: distill<o[k]>
} & {
[k in inferredDefaultKeyOf<o>]?: distill<o[k]>
}
type inferredDefaultKeyOf<o> = {
[k in keyof o]: o[k] extends "default" ? k : never
}[keyof o]
🙁 Actual behavior
requiredDistilledKey inferred as unknown
🙂 Expected behavior
requiredDistilledKey inferred as never, consistent with the equivalent declared version
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
Reproduzieren Sie die Abweichung im verlinkten TypeScript Playground anhand der bereitgestellten Beispiele distill, requiredKeyOf und requiredDeclared. Verfolgen Sie, wie der berechnete Mapped-/Intersection-Typ reduziert wird und wie requiredKeyOf ihn auswertet; fertig ist die Aufgabe, wenn requiredDistilledKey als never inferiert wird und mit requiredDeclaredKey übereinstimmt.
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