1. ホーム
  2. arrays

[解決済み] TypeScript型付き配列の使用法

2023-01-09 03:55:26

質問

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 ランタイム エラーです。Unable to get value of the property '100': object is null or undefined"(プロパティ '100' の値を取得できません:オブジェクトが NULL または未定義です)。

もし私が_possessionの型を any[] で_possessionを初期化すると new Array() を使用しても、例外はスローされません。 私は何かを逃しましたか?

どのように解決するのですか?

ここに構文の間違いがあります。

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

これは、"array of things"を作成するものではありません。物の配列を作成するには、単に配列リテラル式を使用します。

this._possessions = [];

長さを設定したい場合は、配列のコンストラクタの。

this._possessions = new Array(100);

簡単なサンプルを作りましたので プレイグラウンド .

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();
        }
    }
}