Required<T>
Required<T>
は、T
のすべてのプロパティからオプショナルであることを意味する?
を取り除くユーティリティ型です。
Required<T>の型引数
T
型引数T
にはオブジェクトの型を表す型を代入します。
Requiredの使用例
ts
typePerson = {surname : string;middleName ?: string;givenName : string;};typeRequiredPerson =Required <Person >;
ts
typePerson = {surname : string;middleName ?: string;givenName : string;};typeRequiredPerson =Required <Person >;
上のRequiredPerson
は次と同じ型になります。
ts
typeRequiredPerson = {surname : string;middleName : string;givenName : string;};
ts
typeRequiredPerson = {surname : string;middleName : string;givenName : string;};
Requiredの実装
Required<T>
は次のように実装されています。
ts
typeRequired <T > = {[P in keyofT ]-?:T [P ];};
ts
typeRequired <T > = {[P in keyofT ]-?:T [P ];};
Partial<T>
と参照してみると違いがわかります。
ts
typePartial <T > = {[P in keyofT ]?:T [P ];};
ts
typePartial <T > = {[P in keyofT ]?:T [P ];};
異なる部分は-?
と?
の部分です。?
はオプション修飾子で、プロパティがオプショナルになります。-?
はオプション修飾子を取り除くことを意味します。したがって、Required<T>
は、T
のすべてのプロパティからオプショナルであることを意味する?
を取り除いた型を生成します。
このときの-
をmapping modifierと呼びます。
関連情報
📄️ Partial<T>
全プロパティをオプショナルにする
📄️ Mapped Types
インデックス型では設定時はどのようなキーも自由に設定できてしまい、アクセス時は毎回undefinedかどうかの型チェックが必要です。入力の形式が決まっているのであればMapped Typesの使用を検討できます。