ネストされたオブジェクト型から型を抽出&指定方法
ネストされたオブジェクト型からプロパティを指定して、再宣言する方法で色々ググっていい方法を見つけたので備忘録で残します。
下記のようなrelay graphQLでgenerateされた型のcustomerAddress
のブロックだけを型としてを再宣言したい場合、
(alias) type DefaultAddressUpdateMutationResponse = {
readonly customerAddressUpdate: {
readonly customerAddress: {
readonly address1: string | null;
readonly address2: string | null;
readonly city: string | null;
readonly zip: string | null;
readonly province: string | null;
readonly lastName: string | null;
readonly firstName: string | null;
readonly id: string;
} | null;
} | null;
}
import DefaultAddressUpdateMutationResponse
DefaultAddressUpdateMutationResponse['customerAddressUpdate']
DefaultAddressUpdateMutationResponse['customerAddressUpdate']['customerAddress']
と指定しても👆の様に参照先のオブジェクト型にor nullがある場合は、アクセスができないため、エラーになります。
対策としてExcludeで条件指定null削除して再宣言します
Exclude<型, 除外したいもの>
type GetCustomerAddressUpdateType = Exclude<
DefaultAddressUpdateMutationResponse['customerAddressUpdate'],
null
>;
type GetCustomerAddressType = Exclude<
GetCustomerAddressUpdateType['customerAddress'],
null
>;
とすればcustomerAddress
のブロックをGetCustomerAddressTypeという命名で型宣言ができます。
type GetCustomerAddressType
customerAddress: {
readonly address1: string | null;
readonly address2: string | null;
readonly city: string | null;
readonly zip: string | null;
readonly province: string | null;
readonly lastName: string | null;
readonly firstName: string | null;
readonly id: string;
}
以上