TypeScript: Bagaimana cara menyatakan tipe untuk array JavaScript dengan elemen-elemen tipe berbeda tetapi tidak memiliki panjang tetap?
Misalkan saya akan memiliki array JavaScript yang memiliki pola tertentu dari berbagai tipe elemen di awal, tetapi kemudian sebuah (pola) tipe item yang berulang di akhir, hingga jumlah pengulangan arbitrer.
Bagaimana saya bisa mendeklarasikan tipe TypeScript yang akan kompatibel dengan array JavaScript ini?
interface A {
foo: Foo,
bar: Bar,
}
interface B {
baz: Baz
}
interface Bat {
// getArr(): [A, B, B, B], // tuple type puts types at specific indexes
// but only supports a fixed number of elements
// getArr(): Array<A | B>, // array type notation allows arbitrary number
// of elements but doesn't require them to be
// in specific positions
}
Sunting:
Untuk memperjelas lebih lanjut, saya sedang bereksperimen dengan menggunakan deklarasi TypeScript eksternal dengan kode JavaScript murni untuk mengidentifikasi masalah dalam kode JavaScript yang ada. Saya memahami bahwa representasi ini mungkin kurang bijaksana; jika lebih banyak kebijaksanaan telah diterapkan dalam pembuatan kode JavaScript asli, saya tidak akan memulai petualangan ini.
Jawaban #1
Tidak mungkin untuk menyatakan hal seperti itu dalam sistem tipe TypeScript: array harus memiliki tipe yang homogen1
Dalam kasus ini array (Array<c'>) adalah dari c' yang homogen, di mana c'=A | B.
Tentu saja, jika struktur data dapat diuraikan, maka beberapa pengkodean tambahan/kompleks mungkin 'cocok', misalnya.
[ A, Array<B> ]
1 Saya tidak mengetahui adanya sistem tipe bahasa pemrograman yang memungkinkan pembatasan seperti itu - untuk urutan yang tidak terbatas - berdasarkan aturan pola sewenang-wenang.
