microsoft / microsoft/TypeScript

Type inference with conditional for array fails for literal

Offen
#39,162 1 Kommentar 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
2 T. 4 Std.
Gemergte PRs (30 T.)
132

Beschreibung

TypeScript Version: 3.9.2

Search Terms: typescript infer array type conditional literal

Code

function func<T>(opt: {
  value: T;
  arrayValue: T extends any[] ? T : T[];
}) {}

func({
  value: [1, 2, 3],
  arrayValue: [1, 2, 3],
}); // throws error 

const obj = {
  value: [1, 2, 3],
  arrayValue: [1, 2, 3],
};

func(obj);

Expected behavior:
No error is thrown.

Actual behavior:
The commented function call throws the following error:

Type 'number[]' is not assignable to type 'number'.(2322)
input.ts(2, 3): The expected type comes from property 'value' which is declared here on type '{ value: number; arrayValue: number[]; }'

Playground Link: https://www.typescriptlang.org/play/#code/GYVwdgxgLglg9mABKSAeAKgPgBRwA5QBciA3gFCKIBuAhgDYgCmx6A3BYjQE5c0CeANXpMWiRgA8ojMABMAzpzB8A2gF1EAfkTpELNewC+ASlIGyZFBGzlKtBs0TKAjABpEAJjcBmVS47deQWEHZzdPRB8-Y3MIBDkoRDgAIwArRABeUg47EUdXD29ffx5+IXtiUIKIooN2C3ArZJSjdiA

Related Issues:

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 damit, das generische Beispiel für bedingte Typen im verknüpften TypeScript Playground zu reproduzieren, und vergleiche den direkten Aufruf mit dem Aufruf unter Verwendung von obj. Verfolge die beteiligte Typinferenz und die Verarbeitung bedingter Typen; abgeschlossen ist die Aufgabe, wenn der direkte Aufruf keinen Fehler erzeugt und dabei die erwarteten inferierten Array-Typen beibehält, mit einem Regressionstest für das Beispiel.

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.