Mam definicję klasy TypeScript, która zaczyna się w ten sposób;
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];
}
Wygląda na to, że tablica typu Thing nie jest poprawnie tłumaczona na odpowiedni typ tablicy JavaScript. Oto fragment wygenerowanego kodu JavaScript:
function Person(name) {
this._name = name;
this._possessions = new Entities.Thing[100]();
}
Wykonując kod zawierający obiekt Person, zgłoś wyjątek podczas próby zainicjowania pola _possession:
Błąd to „0x800a138f - błąd środowiska wykonawczego Microsoft JScript: nie można pobrać wartości właściwości„ 100 ”: obiekt jest pusty lub niezdefiniowany”.
Jeśli zmienię typ _possession na any[]
i zainicjalizuję _possession z new Array()
wyjątkiem nie jest wyrzucany. Przegapiłem coś?
źródło
private _possessions: Thing[] : [];
w definicji klasy?Możesz spróbować jednego z nich. Nie popełniają błędów.
Jest to również sugerowana metoda z maszynopisu do deklaracji tablicy .
Używając tego
Array<Thing>
, korzysta z typów ogólnych w maszynie. Jest to podobne do pytania oList<T>
kod w języku C #.lub
źródło
new Array<Thing>(100)
.Tłumaczenie jest poprawne, a wpisanie wyrażenia nie. TypeScript nieprawidłowo wpisuje wyrażenie
new Thing[100]
jako tablicę.Thing
Zindeksowanie funkcji konstruktora przy użyciu operatora indeksu powinno być błędem . W C # to przydzieliłoby tablicę 100 elementów. W JavaScript wywołuje to wartość w indeksie 100,Thing
jakby była konstruktorem. Ponieważ są to wartościundefined
, powoduje to wspomniany błąd.new Array(100)
Zamiast tego w JavaScript i TypeScript .Powinieneś zgłosić to jako błąd w CodePlex.
źródło