次のような ES6 (ECMAscript 2016) マップのプロパティを持つクラスを TypeScript で作成しています。
class Item {
configs: ????;
constructor () {
this.configs = new Map();
}
}
TypeScript で ES6 Map 型を宣言するにはどうすればよいですか?
ベストアンサー1
編集(2019年6月5日):「TypeScriptはネイティブでサポートしている」という考えはMap
今でも正しいですが、バージョン2.1以降、TypeScriptはと呼ばれるものをサポートしています。Record
。
type MyMapLikeType = Record<string, IPerson>;
const peopleA: MyMapLikeType = {
"a": { name: "joe" },
"b": { name: "bart" },
};
残念ながら、最初のジェネリック パラメーター (キー タイプ) はまだ完全には考慮されていません。タイプがあっても、 (a )string
のようなものは依然として有効です。peopleA[0]
number
編集 (2016 年 4 月 25 日):以下の回答は古いため、最適な回答とは見なされません。TypeScript は現在、Maps を「ネイティブに」サポートしているため、出力が ES6 のときに ES6 Maps を使用できるようになります。ES5 の場合、ポリフィルは提供されないため、自分で埋め込む必要があります。
詳細については、モハメド・ヘガジーの回答は以下より現代的な答えを求めるなら、あるいはこのRedditのコメント短縮版です。
1.5.0ベータ版時点では、TypeScriptはまだサポートしていません。地図まだ一部ではありませんロードマップ、 どちらか。
string
現在、最善の解決策は、型指定されたキーと値 (ハッシュマップと呼ばれることもあります) を持つオブジェクトです。 型のキーと 型の値を持つオブジェクトの場合number
:
var arr : { [key:string]:number; } = {};
ただし、いくつか注意点があります。
- キーはタイプ
string
またはnumber
- 実際には、キー タイプとして何を使用するかは重要ではありません。数字と文字列はどちらも互換的に受け入れられるためです (値のみが適用されます)。
上記の例では、
// OK:
arr["name"] = 1; // String key is fine
arr[0] = 0; // Number key is fine too
// Not OK:
arr[{ a: "a" }] = 2; // Invalid key
arr[3] = "name"; // Invalid value