1. ホーム
  2. ジャバスクリプト

[解決済み】TypescriptのES6マップ

2022-04-02 16:08:24

質問

typescriptで、ES6(ECMAscript 2016)のMapであるプロパティを持つクラスを以下のように作成しています。

class Item {
  configs: ????;
  constructor () {
    this.configs = new Map();
  }
}

ES6 Map型をtypescriptで宣言するには?

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

EDIT(2019年6月5日)。 TypeScriptがサポートするのは、以下の通りです。 Map というものをサポートしています。 Record .

type MyMapLikeType = Record<string, IPerson>;
const peopleA: MyMapLikeType = {
    "a": { name: "joe" },
    "b": { name: "bart" },
};

残念ながら、最初の一般的なパラメータ (キータイプ) は、まだ完全に尊重されていません。 string のような型では peopleA[0] (a number )はまだ有効です。


EDIT(2016年4月25日)。 下記の回答は古いので、ベストアンサーとは考えない方がいいです。TypeScriptは現在、Maps "natively"をサポートしており、出力がES6の場合にES6 Mapsを使用できるようにしているだけです。ES5については、ポリフィルは提供されていません。

詳しくは mohamed hegazyの回答は以下の通りです。 は、より現代的な回答、あるいは この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