🐡
[TypeScript]オブジェクトのユニオン型で各オブジェクトのプロパティが異なるときに特定のプロパティのみを除外する型をつくる方法
TypeScriptでオブジェクトのユニオン型で各オブジェクトのプロパティが異なるときに特定のプロパティのみを除外する型をつくる方法
type ExampleTypeA = {
type: "A";
a: string;
common: Date;
};
type ExampleTypeB = {
type: "B";
b: number;
common: Date;
};
type Example = ExampleTypeA | ExampleTypeB;
// {type: "A" | "B"} になる
type ExampleOmit = Omit<Example, "common">
type OmitFromUnion<T, K extends keyof any> = T extends any ? Omit<T, K> : never;
// Omit<ExampleTypeA, "common"> | Omit<ExampleTypeB, "common"> になる
// つまり {type: "A"; a: string} | {type: "B"; b: number;} になる
type ExampleOmitFromUnion = OmitFromUnion<Example, "common">;
参考
Discussion