microsoft / microsoft/TypeScript

Allow inferring return type within a type guard in conditional types

Offen
#44,686 3 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Bug Domain: Conditional Types
Vorherrschende Sprache
Go
Sterne
111k
Forks
14.4k
Ø Merge
1 T. 19 Std.
Gemergte PRs (30 T.)
117

Beschreibung

Bug Report

🔎 Search Terms

typeguard conditional infer

🕗 Version & Regression Information
  • This is the behavior in every version I tried, and I reviewed the FAQ for entries about (bug reporting)
⏯ Playground Link

Playground link with relevant code

💻 Code

This is simplified pretty heavily:

type InferredTypeGuard<TypeGuard> = 
    TypeGuard extends ((node: infer Input) => node is infer Output)
        ? (node: Input) => node is Output
        : never;
🙁 Actual behavior

Error on infer Output:

A type predicate's type must be assignable to its parameter's type.
  Type 'Output' is not assignable to type 'Input'.
    'Input' could be instantiated with an arbitrary type which could be unrelated to 'Output'.(2677)
🙂 Expected behavior

TypeScript should allow a conditional type to infer the Output type within the type guard function's return type.

There's no other syntax I can find to do so, and I would have thought this would be the cleanest syntax. Not sure if bug report or feature request...

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 dem verknüpften TypeScript Playground-Beispiel und dem vereinfachten bedingten Typ mit infer Input und infer Output. Verfolge die Zuweisbarkeitsprüfung des Typprädikats, die den Fehler 2677 meldet, und ermittle, wie die Inferenz bedingter Typen damit interagieren sollte. Als abgeschlossen gilt die Aufgabe, wenn das Beispiel mit den erwarteten inferierten Eingabe- und Ausgabetypen typgeprüft wird und eine Regressionstestabdeckung für dieses Verhalten vorhanden ist.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

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

Neue Issues direkt in Ihr Postfach

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