TypeScriptバージョン: 2.0.3 /毎晩(2.1.0-dev.201xxxxx)
2.0.3
コード
function test(val: 'AAA'|'BBB'){
//xxx
}
let a = true ? 'AAA' : 'BBB';
test(a);
予想される行動:
正常にコンパイルされました
実際の動作:
エラーが発生しました:
エラーTS2345:タイプ 'string'の引数はタイプ '"AAA"のパラメータに割り当てることができません| 「BBB」」。
これは何度か議論されてきました。
まず、let変数に割り当てます。これは、コンパイラが将来値を変更する可能性があると想定するため、変数に文字列リテラルタイプを割り当てないことを意味します。
また、2.0では、リテラルの推論はありませんでした。 開発者はそれを明示的に行う必要があります。 したがって、これを修正するには:
function test(val: 'AAA'|'BBB'){
//xxx
}
let a: 'AAA' | 'BBB' = true ? 'AAA' : 'BBB';
test(a);
しかし、TypeScript 2.1では、 const
への割り当てを可能な限り厳密な方法で解釈するため、次のように行うことができます。
function test(val: 'AAA'|'BBB'){
//xxx
}
const a = true ? 'AAA' : 'BBB';
test(a);
最も参考になるコメント
これは何度か議論されてきました。
まず、let変数に割り当てます。これは、コンパイラが将来値を変更する可能性があると想定するため、変数に文字列リテラルタイプを割り当てないことを意味します。
また、2.0では、リテラルの推論はありませんでした。 開発者はそれを明示的に行う必要があります。 したがって、これを修正するには:
しかし、TypeScript 2.1では、
const
への割り当てを可能な限り厳密な方法で解釈するため、次のように行うことができます。