Versi TypeScript: 2.0.3 / malam (2.1.0-dev.201xxxxx)
2.0.3
Kode
function test(val: 'AAA'|'BBB'){
//xxx
}
let a = true ? 'AAA' : 'BBB';
test(a);
Perilaku yang diharapkan:
Berhasil dikompilasi
Perilaku sebenarnya:
Mendapat kesalahan:
Kesalahan TS2345: Argumen tipe 'string' tidak dapat ditetapkan ke parameter tipe '"AAA" | "BBB"'.
Hal ini telah dibahas beberapa kali.
Pertama, Anda menetapkan variabel let, yang berarti kompiler akan berasumsi bahwa Anda mungkin ingin mengubah nilai di masa mendatang, oleh karena itu ia tidak menetapkan tipe literal string ke variabel.
Juga, di 2.0, tidak pernah ada inferensi literal. Pengembang harus melakukannya secara eksplisit. Jadi untuk memperbaikinya:
function test(val: 'AAA'|'BBB'){
//xxx
}
let a: 'AAA' | 'BBB' = true ? 'AAA' : 'BBB';
test(a);
Tetapi di TypeScript 2.1 itu akan menafsirkan tugas ke const
dengan cara yang paling ketat, jadi Anda bisa melakukannya seperti ini:
function test(val: 'AAA'|'BBB'){
//xxx
}
const a = true ? 'AAA' : 'BBB';
test(a);
Komentar yang paling membantu
Hal ini telah dibahas beberapa kali.
Pertama, Anda menetapkan variabel let, yang berarti kompiler akan berasumsi bahwa Anda mungkin ingin mengubah nilai di masa mendatang, oleh karena itu ia tidak menetapkan tipe literal string ke variabel.
Juga, di 2.0, tidak pernah ada inferensi literal. Pengembang harus melakukannya secara eksplisit. Jadi untuk memperbaikinya:
Tetapi di TypeScript 2.1 itu akan menafsirkan tugas ke
const
dengan cara yang paling ketat, jadi Anda bisa melakukannya seperti ini: