型付きおよび動的型付きTypeScriptインターフェイス

3
2022.01.14

私はTypescriptインターフェイスについて質問があります。私は次のインターフェイスを持っています:

interface MappingConfiguration {
  [key: string]: Configuration;
  required: string[];
}

interface Configuration {
 a: string;
 b: string;
}

私はこれがうまくいかない理由を理解しています。MappingConfiguration インターフェイスでは、タイプが設定された動的キーを使用できます。したがって、オブジェクト上で任意のプロパティをバインドできます。これは意図したとおりに動作します。しかし、ここでの問題は、私はまた、文字列であるプロパティ"required"を持っています[]。Typescript は構成型を想定しているため、文字列 [] を使用できません。私はそれを理解しています。だから私は次の結果を思いついた:

interface MappingConfiguration {
  [key: string]: Configuration | string[];
  required: string[];
}

interface Configuration {
 a: string;
 b: string;
}

これは完全に間違っていると感じます。インターフェイス内で動的オブジェクト キーと静的オブジェクト キーを組み合わせる別の方法はありますか?事前に感謝!:)

回答
2
2022.01.14

最初の簡単なアイデアは 、MappingConfigurationに追加のプロパティを追加することです。

interface MappingConfiguration {
  required: string[];
  configurations?: Record<string, Configuration>;
}