Typescriptレコードのオプションキーのリストを定義する 質問する

Typescriptレコードのオプションキーのリストを定義する 質問する

キー 'a'、'b'、または 'c' のみを持つオブジェクトを入力したいです。

したがって、次のように実行できます。

Interface IList {
    a?: string;
    b?: string;
    c?: string;
}

Recordこれらはすべてオプションです。これを1行で書けるかどうか疑問に思いました。

type List = Record<'a' | 'b' | 'c', string>;

唯一の問題は、すべてのキーを定義する必要があることです。そのため、

type List = Partial<Record<'a' | 'b' | 'c', string>>;

これは機能しますが、Partial を使用せずにこれを行うより良い方法があると思います。 Record 内でキーをオプションにする別の方法はありますか?

ベストアンサー1

のメンバーのオプション性を指定する方法はありませんRecord。定義により必須です。

type Record<K extends keyof any, T> = {
    [P in K]: T; // Mapped properties are not optional, and it's not a homomorphic mapped type so it can't come from anywhere else.
};

これが一般的なシナリオである場合は、独自のタイプを定義できます。

type PartialRecord<K extends keyof any, T> = {
  [P in K]?: T;
};
type List =  PartialRecord<'a' | 'b' | 'c', string>

PartialRecordまたは、定義済みのマップされた型を使用して定義することもできます。

type PartialRecord<K extends keyof any, T> =  Partial<Record<K, T>>

おすすめ記事