1. ホーム
  2. dictionary

[解決済み】TypescriptでDictionaryを宣言し、初期化する。

2022-03-26 03:17:01

質問

次のようなコードがあるとします。

interface IPerson {
   firstName: string;
   lastName: string;
}

var persons: { [id: string]: IPerson; } = {
   "p1": { firstName: "F1", lastName: "L1" },
   "p2": { firstName: "F2" }
};

なぜ初期化が拒否されないのか?結局、2番目のオブジェクトは "lastName"プロパティを持っていないのです。

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

編集 : その後、最新のTSバージョンで修正されました。OPの投稿に対する@Simon_Weaverさんのコメントを引用します。

<ブロッククオート

注:これはその後修正されました(どの正確なTSバージョンかは不明です)。I VSでこのようなエラーが発生するのは予想通りです。 Index signatures are incompatible. Type '{ firstName: string; }' is not assignable to type 'IPerson'. Property 'lastName' is missing in type '{ firstName: string; }'.


どうやら、宣言時に初期データを渡すとうまくいかないようです。 これはTypeScriptのバグだと思うので、プロジェクトサイトに上げてみてください。

というように、宣言と初期化で例を分けることで、型付き辞書を活用することができます。

var persons: { [id: string] : IPerson; } = {};
persons["p1"] = { firstName: "F1", lastName: "L1" };
persons["p2"] = { firstName: "F2" }; // will result in an error