私はこのようなコードスニペットを持っています:
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 )。
TypeScriptでは、配列を宣言するときに次のいずれかを実行します。
let a: Array<number>;
または
let a: number[];
使用する場合:
let a: [number];
あなたは実際には a Tuple を宣言しています。この場合、長さ1は数値です。
これは別のタプルです:
let a: [number, string, string];
このエラーが発生する理由は、tags
およびlocations
に割り当てる配列の長さが0であり、1である必要があるためです。
Tag[]
を使用して、TypeScriptにTag
の配列を宣言していることを伝えます。
export class TagCloud {
tags: Tag[];
locations: Location[];
constructor() {
// TS already knows the type
this.tags = []
this.locations =[]
}
}