TypeScript Omitを使わずに指定したキーをオブジェクトから削除する

指定したキーを削除した型を返したい場合はOmitを使います。

type User = {
    firstName: string
    lastName: string
    age: number
}

type T1 = Omit<User, 'lastName' | 'age'>
// {
//     firstName: string;
// }

Omitを使わない場合は、以下のようにすることで同じようなことが可能です。

type MyOmit<T, K extends keyof T> = {
    [P in keyof T as P extends K ? never : P]: T[P]
}

type T2 = T3<User, 'lastName' | 'age'>
// {
//     firstName: string;
// }

as P extends K ? never : P のようにすることで、オブジェクトのキーの型を上書きすることができます。

P が K と互換性があるなら P型(文字列リテラル)、そうでない場合は never型になります。

キーがnever型になると、そのキーはなくなることを利用しています。

このキーの型を上書きする方法は公式ドキュメントにも記載されています。