Typescript: Variabel tidak dikenali sebagai tipe literal string saat menggunakan operator ternary

Dibuat pada 3 Nov 2016  ·  1Komentar  ·  Sumber: microsoft/TypeScript



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"'.

Question

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:

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);

>Semua komentar

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);
Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

weswigham picture weswigham  ·  3Komentar

blendsdk picture blendsdk  ·  3Komentar

Roam-Cooper picture Roam-Cooper  ·  3Komentar

Antony-Jones picture Antony-Jones  ·  3Komentar

manekinekko picture manekinekko  ·  3Komentar