Saya memiliki definisi kelas TypeScript yang dimulai seperti ini;
module Entities {
export class Person {
private _name: string;
private _possessions: Thing[];
private _mostPrecious: Thing;
constructor (name: string) {
this._name = name;
this._possessions = new Thing[100];
}
Sepertinya array bertipe Thing tidak diterjemahkan dengan benar ke tipe array Javascript yang sesuai. Ini adalah cuplikan dari JavaScript yang dihasilkan:
function Person(name) {
this._name = name;
this._possessions = new Entities.Thing[100]();
}
Menjalankan kode yang berisi objek Person, memunculkan pengecualian saat mencoba menginisialisasi bidang _possession:
Kesalahannya adalah "0x800a138f - Kesalahan runtime Microsoft JScript: Tidak dapat memperoleh nilai properti '100': objek adalah nol atau tidak ditentukan".
Jika saya mengubah jenis _possession menjadi any[]
dan menginisialisasi _possession dengan new Array()
pengecualian tidak dilempar. Apakah saya melewatkan sesuatu?
sumber
private _possessions: Thing[] : [];
dalam definisi kelas?Anda bisa mencoba salah satu dari ini. Mereka tidak memberi saya kesalahan.
Ini juga merupakan metode yang disarankan dari skrip ketikan untuk deklarasi array .
Dengan menggunakan
Array<Thing>
itu adalah memanfaatkan generik dalam naskah ketikan. Ini mirip dengan memintaList<T>
kode dalam c #.atau
sumber
new Array<Thing>(100)
.Terjemahan benar, ekspresi tidak diketik. TypeScript salah mengetik ekspresi
new Thing[100]
sebagai larik. Ini harus menjadi kesalahan untuk mengindeksThing
, fungsi konstruktor, menggunakan operator indeks. Dalam C # ini akan mengalokasikan array 100 elemen. Dalam JavaScript, ini memanggil nilai pada indeks 100Thing
seolah-olah adalah konstruktor. Karena nilaiundefined
itu menimbulkan kesalahan yang Anda sebutkan. Di JavaScript dan TypeScript yang Anda inginkannew Array(100)
.Anda harus melaporkan ini sebagai bug di CodePlex.
sumber