У меня есть определение класса TypeScript, которое начинается так;
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];
}
Похоже, что массив типа Thing некорректно переводится в соответствующий тип массива Javascript. Это фрагмент из сгенерированного JavaScript:
function Person(name) {
this._name = name;
this._possessions = new Entities.Thing[100]();
}
Выполняя код, содержащий объект Person, генерирует исключение при попытке инициализировать поле _possession:
Ошибка: «0x800a138f - ошибка времени выполнения Microsoft JScript: невозможно получить значение свойства« 100 »: объект имеет значение null или undefined».
Если я изменю тип _possession на any[]
и инициализирую _possession, new Array()
исключение не будет выбрано . Я что-то пропустил?
источник
private _possessions: Thing[] : [];
в определении класса?Вы можете попробовать любой из них. Они не дают мне ошибок.
Это также предлагаемый метод из машинописного текста для объявления массива .
Используя это,
Array<Thing>
он использует универсальные типы в машинописном тексте. Это похоже на запросList<T>
кода в C #.или
источник
new Array<Thing>(100)
.Перевод правильный, написание выражения - нет. TypeScript неправильно набирает выражение
new Thing[100]
как массив.Thing
Индексирование функции-конструктора с использованием оператора индексации должно вызвать ошибку . В C # это выделит массив из 100 элементов. В JavaScript это вызывает значение с индексом 100,Thing
как если бы это был конструктор. Поскольку это значения,undefined
возникает упомянутая вами ошибка.new Array(100)
Вместо этого в JavaScript и TypeScript .Вы должны сообщить об этом как об ошибке в CodePlex.
источник