arrays - angular title




TypeScript類型的數組用法 (2)

我有一個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'的值:對象為空或未定義”。

如果我將_possession的類型更改為any[]並且不拋出new Array()異常,則初始化_possession。 我錯過了什麼?


你可以嘗試這些。 他們不會給我錯誤。

它也是來自typescript數組聲明的建議方法。

通過使用Array<Thing>它正在使用打字稿中的泛型。 它類似於在C#代碼中要求List<T>

// Declare with default value
private _possessions: Array<Thing> = new Array<Thing>();
// or
private _possessions: Array<Thing> = [];
// or -> prefered by ts-lint
private _possessions: Thing[] = [];

要么

// declare
private _possessions: Array<Thing>;
// or -> preferd by ts-lint
private _possessions: Thing[];

constructor(){
    //assign
    this._possessions = new Array<Thing>();
    //or
    this._possessions = [];
}

你的語法錯誤在這裡:

this._possessions = new Thing[100]();

這不會創建“一組事物”。 要創建一組數組,可以簡單地使用數組文字表達式:

this._possessions = [];

數組構造函數如果你想設置長度:

this._possessions = new Array(100);

我已經創建了一個簡單的工作示例,您可以在playground嘗試。

module Entities {  

    class Thing {

    }        

    export class Person {
        private _name: string;
        private _possessions: Thing[];
        private _mostPrecious: Thing;

        constructor (name: string) {
            this._name = name;
            this._possessions = [];
            this._possessions.push(new Thing())
            this._possessions[100] = new Thing();
        }
    }
}




typescript