RequireAtLeastOne type
RequireAtLeastOne は、インターフェイスの少なくとも 1 つのプロパティ (任意のプロパティを指定できます) が存在する必要がある型を作成するのに役立ちます。
これは、TypeScript のユーティリティの種類が原因で機能します。 https://www.typescriptlang.org/docs/handbook/utility-types.html 次のように調べてみましょう。
[K in keyof T]-?
このプロパティ (K) は、T のプロパティと同じ名前を持つ場合にのみ有効です。Required<Pick<T, K>>
は、イテレーション内の現在のプロパティだけを持つ T から新しい型を作成し、それを必須としてマークしますPartial<Pick<T, Exclude<keyof T, K>>>
は、プロパティ K を除き、T のすべてのプロパティを持つ新しい型を作成します。&
は、 から必要なプロパティを 1 つだけ持つ型と、Required<...>
Partial<...>
からのすべての省略可能なプロパティを統合します。[keyof T]
では、T のプロパティのみが許可されます。
type RequireAtLeastOne<T> = {
[K in keyof T]-?: Required<Pick<T, K>> & Partial<Pick<T, Exclude<keyof T, K>>>
}[keyof T]