Eu tenho uma definição de classe TypeScript que começa assim;
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];
}
Parece que um array do tipo Thing não é traduzido corretamente para o tipo de array Javascript correspondente. Este é um snippet do JavaScript gerado:
function Person(name) {
this._name = name;
this._possessions = new Entities.Thing[100]();
}
Ao executar o código que contém um objeto Person, lance uma exceção ao tentar inicializar o campo _possession:
O erro é "0x800a138f - erro de tempo de execução do Microsoft JScript: não é possível obter o valor da propriedade '100': o objeto é nulo ou indefinido".
Se eu alterar o tipo de _possession para any[]
e inicializar _possession com new Array()
exceção, não será lançada. Perdi alguma coisa?
fonte
private _possessions: Thing[] : [];
na definição de classe?Você pode tentar qualquer um destes. Eles não estão me dando erros.
É também o método sugerido a partir do typescript para a declaração do array .
Ao usar o
Array<Thing>
, está fazendo uso dos genéricos no texto datilografado. É semelhante a pedir umList<T>
código em c #.ou
fonte
new Array<Thing>(100)
.A tradução está correta, a digitação da expressão não. TypeScript está digitando incorretamente a expressão
new Thing[100]
como uma matriz. Deve ser um erro indexarThing
, uma função construtora, usando o operador de índice. Em C #, isso alocaria uma matriz de 100 elementos. Em JavaScript, isso chama o valor no índice 100 deThing
como se fosse um construtor. Como esses valores são,undefined
isso gera o erro que você mencionou. Em JavaScript e TypeScript você desejanew Array(100)
.Você deve relatar isso como um bug no CodePlex.
fonte