web-dev-qa-db-ja.com

エラーTS2322:タイプ 'Object []'はタイプ '[Object]'に割り当てることができません

私はこのようなコードスニペットを持っています:

export class TagCloud {

    tags: [Tag];
    locations: [Location];

    constructor() {
        this.tags = new Array<Tag>();
        this.locations = new Array<Location>();
    }
}

しかし、これは私に次のエラーを与えます:

エラーTS2322:タイプ 'Tag []'はタイプ '[Tag]'に割り当てることができません。タイプ 'Tag []'にプロパティ '0'がありません。

エラーTS2322:タイプ 'Location []'はタイプ '[Lo cation]'に割り当てることができません。タイプ「Location []」にプロパティ「0」がありません。

私は何を間違っていますか(コードは機能しています)?

私はes6-shimタイプの説明でタイピングを使用しています( https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/es6-shim )。

6
Tobias Stangl

TypeScriptでは、配列を宣言するときに次のいずれかを実行します。

let a: Array<number>;

または

let a: number[];

使用する場合:

let a: [number];

あなたは実際には a Tuple を宣言しています。この場合、長さ1は数値です。
これは別のタプルです:

let a: [number, string, string];

このエラーが発生する理由は、tagsおよびlocationsに割り当てる配列の長さが0であり、1である必要があるためです。

11
Nitzan Tomer

Tag[]を使用して、TypeScriptにTagの配列を宣言していることを伝えます。

export class TagCloud {

    tags: Tag[];
    locations: Location[];

    constructor() {
        // TS already knows the type
        this.tags = []
        this.locations =[]
    }
}
0
Jeff