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"'.
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);
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:
Aber in TypeScript 2.1 interpretiert es die Zuweisungen an
const
auf die strengste Art und Weise, also könnten Sie es so machen: