Indexed this types don't narrow when their referenced property narrows

Offen
#26,759 0 Kommentare 1 Reaktion 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Bewertung

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

Rechercherichtung

Beginne mit dem TypeScript-Reproduzierer im Issue und vergleiche sein Verhalten mit dem des verwandten Issues #24085. Verfolge, wie sich die Eingrenzung von x.kind auf den indizierten Typ von this['kind'] auswirkt, und überprüfe anschließend, dass die beiden Zweige für x.value jeweils string und number melden.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

In Discussion Suggestion

TypeScript Version: 3.1.0-dev.20180829

Search Terms: this index narrowing generics

Code

type Keys = 'string' | 'number';
type Switch<T extends Keys> =
	T extends 'string' ? string :
	T extends 'number' ? number :
	never;

interface Main<T extends Keys> {
	kind: T;
	value: Switch<this['kind']>;
}

let x: Main<Keys> = null as any;

x.kind;
x.value;
if (x.kind === 'string') {
	x.kind; // Narrowed to "string"
	x.value;
} else {
	x.kind; // Narrowed to "number"
	x.value;
}

Expected behavior:
In the first if block, x.value should be of type string. In the second if block, x.value should be of type number.

Actual behavior:
In both cases x.value is not narrowed, despite x.kind narrowing successfully.

Related Issues: #24085

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

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus microsoft/TypeScript

Alle Issues in microsoft/TypeScript

Ähnliche Issues

Weitere Issues zu Go

Neue Issues direkt in Ihr Postfach

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