TypescriptのES6マップ 質問する

TypescriptのES6マップ 質問する

次のような 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; } = {};

ただし、いくつか注意点があります。

  1. キーはタイプstringまたはnumber
  2. 実際には、キー タイプとして何を使用するかは重要ではありません。数字と文字列はどちらも互換的に受け入れられるためです (値のみが適用されます)。

上記の例では、

// 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

おすすめ記事