Typescript: Variable wird bei Verwendung des ternären Operators nicht als String-Literaltyp erkannt

Erstellt am 3. Nov. 2016  ·  1Kommentar  ·  Quelle: microsoft/TypeScript



TypeScript-Version: 2.0.3 / nightly (2.1.0-dev.201xxxxx)
2.0.3

Code

function test(val: 'AAA'|'BBB'){
  //xxx
}

let a = true ? 'AAA' : 'BBB';
test(a);

Erwartetes Verhalten:
Erfolgreich kompiliert

Tatsächliches Verhalten:
Habe Fehler:

Fehler TS2345: Argument vom Typ 'String' kann Parameter vom Typ '"AAA" nicht zugewiesen werden | "BBB"'.

Question

Hilfreichster Kommentar

Dies wurde mehrfach diskutiert.

Zuerst weisen Sie einer let-Variablen zu, was bedeutet, dass der Compiler davon ausgeht, dass Sie den Wert in Zukunft möglicherweise ändern möchten, daher weist er der Variablen keinen String-Literaltyp zu.

Außerdem gab es in 2.0 nie einen Rückschluss auf Literale. Das müsste der Entwickler explizit tun. Also um dies zu beheben:

function test(val: 'AAA'|'BBB'){
  //xxx
}

let a: 'AAA' | 'BBB' = true ? 'AAA' : 'BBB';
test(a);

Aber in TypeScript 2.1 interpretiert es die Zuweisungen an const auf die strengste Art und Weise, also könnten Sie es so machen:

function test(val: 'AAA'|'BBB'){
  //xxx
}

const a = true ? 'AAA' : 'BBB';
test(a);

>Alle Kommentare

Dies wurde mehrfach diskutiert.

Zuerst weisen Sie einer let-Variablen zu, was bedeutet, dass der Compiler davon ausgeht, dass Sie den Wert in Zukunft möglicherweise ändern möchten, daher weist er der Variablen keinen String-Literaltyp zu.

Außerdem gab es in 2.0 nie einen Rückschluss auf Literale. Das müsste der Entwickler explizit tun. Also um dies zu beheben:

function test(val: 'AAA'|'BBB'){
  //xxx
}

let a: 'AAA' | 'BBB' = true ? 'AAA' : 'BBB';
test(a);

Aber in TypeScript 2.1 interpretiert es die Zuweisungen an const auf die strengste Art und Weise, also könnten Sie es so machen:

function test(val: 'AAA'|'BBB'){
  //xxx
}

const a = true ? 'AAA' : 'BBB';
test(a);
War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

weswigham picture weswigham  ·  3Kommentare

kyasbal-1994 picture kyasbal-1994  ·  3Kommentare

dlaberge picture dlaberge  ·  3Kommentare

MartynasZilinskas picture MartynasZilinskas  ·  3Kommentare

Roam-Cooper picture Roam-Cooper  ·  3Kommentare