microsoft / microsoft/TypeScript

Can't infer the type of this self-calculated

Offen
#54,766 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Needs Investigation
Vorherrschende Sprache
Go
Sterne
111k
Forks
14.3k
Ø Merge
1 T. 19 Std.
Gemergte PRs (30 T.)
117

Beschreibung

Bug Report

🔎 Search Terms
  • infer
  • self-calculated
  • generic
🕗 Version & Regression Information

This is the behavior in every version I tried, and I reviewed the FAQ for entries about Type Inference

⏯ Playground Link
type Exactify<T, X extends T> = T & {
  [K in keyof X]: K extends keyof T ? X[K] : never
}

declare function pick<T, X extends Exactify<{
  [K in keyof T]?: true
}, X>>(t: T, x: X): [Pick<T, keyof X>,...

Playground Link

💻 Code
type Exactify<T, X extends T> = T & {
  [K in keyof X]: K extends keyof T ? X[K] : never
}

declare function pick<T, X extends Exactify<{
  [K in keyof T]?: true
}, X>>(t: T, x: X): [Pick<T, keyof X>, X, X extends Exactify<infer A, infer B> ? B : never]

const t0 = pick({ a: '1', b: 1 }, { a: true })
const [
  a0,
  a1,
// ^? Exactify<{ a?: string | undefined; b?: number | undefined }, { a: boolean }>
  a2
// ^? { a?: true | undefined; b?: true | undefined }
] = pick({ a: '1', b: 1 }, { a: true })
🙁 Actual behavior

The a2 variable is { a?: true | undefined; b?: true | undefined } type.

🙂 Expected behavior

Infer the a2 variable is { a: boolean } or { a: true } type.

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginne mit der verlinkten TypeScript Playground-Reproduktion und dem generischen pick/Exactify-Beispiel im Issue. Untersuche, warum der inferierte a2-Typ Exactify<...> statt { a: boolean } oder { a: true } ist, und überprüfe dann die erwartete Inferenz mit einem fokussierten Compiler-Test.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
typescript
Bereich
compilers
Issue-Typ
Bug
Schwierigkeit
5/5
Geschätzter Aufwand
Über eine Woche
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.