Open2
Typescript型定義事例集
オブジェクトのプロパティをPick/Omitしたいとき
/**
* オブジェクトから指定したプロパティのみを抽出したオブジェクトを返す
* @param instance 元になるオブジェクト
* @param pickProperties 抽出するプロパティ
* @returns 抽出後のオブジェクト
*/
export function pickProperties<K>(
instance: K extends object ? K : never,
...pickProperties: (keyof K)[]
): Pick<K, (typeof pickProperties)[number]> {
return <Pick<K, (typeof pickProperties)[number]>>pickProperties.reduce<
Partial<K>
>((i, p) => {
if (p in instance) i[p] = instance[p];
return i;
}, {});
}
/**
* オブジェクトから指定したプロパティを削除したオブジェクトを返す
* @param instance 元になるオブジェクト
* @param omitProperties 削除するプロパティ
* @returns 削除後のオブジェクト
*/
export function omitProperties<K>(
instance: K extends object ? K : never,
...omitProperties: (keyof K)[]
): Omit<K, (typeof omitProperties)[number]> {
return <Omit<K, (typeof omitProperties)[number]>>omitProperties.reduce<
Partial<K>
>(
(i, p) => {
delete i[p];
return i;
},
Object.assign({}, instance)
);
}
型の一部のプロパティのみOmitしたいとき
type OmitPartial<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;
(型名だけ変更させていただきました)