microsoft / microsoft/TypeScript

Function expression or method is not inferable when we have mapped type with a conditional type

Offen
#60,047 2 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Domain: check: Type Inference Help Wanted Possible Improvement
Vorherrschende Sprache
Go
Sterne
111k
Forks
14.3k
Ø Merge
2 T. 4 Std.
Gemergte PRs (30 T.)
132

Beschreibung

🔎 Search Terms

conditional method arrow function

🕗 Version & Regression Information
  • This is the behavior in every version I tried, and I reviewed the FAQ
⏯ Playground Link

Playground Link

💻 Code
type Map<T> =  { 
  readonly [P in keyof T]: T[P] extends boolean ? "boolean":  "other"
} 
export function buildCommand<F extends Record<string, unknown>>(builderArgs: { 
  func: (p: F) => void
  params: Map<NoInfer<F>>
}) {

}
type Foo = { foo: boolean };
// Function expression does not work
buildCommand({
  func: function (p: Foo) { },
  params: {
    foo: "boolean"
  }
})

// Methods don't work
buildCommand({
  func(p: Foo) { },
  params: {
    foo: "boolean"
  }
})

// Arrow function works
buildCommand({
  func: (p: Foo) => { },
  params: {
    foo: "boolean"
  }
})
🙁 Actual behavior

For the first two calls we get an error while the third one is successful

🙂 Expected behavior

All three calls should be successful

Additional information about the issue

Removing the constraint from F (Playground Link) or changing it to F extends Record<keyof F, unknown> (Playground Link) will remove the error.

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 verknüpften TypeScript Playground-Reproduktion und vergleiche die Inferenz für die Fälle mit Funktionsausdruck, Methode und Pfeilfunktion unter der Record<string, unknown>-Einschränkung. Als erledigt gilt, wenn alle drei buildCommand-Aufrufe akzeptiert werden und das gemeldete Verhalten erhalten bleibt, wenn die Einschränkung entfernt oder geändert 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

Neue Issues direkt in Ihr Postfach

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