BFE.dev 解答例 - TypeScript タイプパズル
6. Omit<T, K> を実装する

// author by @jichen257

Kはkeyof anyを拡張し、string | number | symbol`、すなわちオブジェクトのすべての望ましいタイプのキーにバインドすることに注意してください。

// 解決策1
type MyOmit<T, K extends keyof any> = {
  [P in keyof T as P extends K ? never : P]: T[P]
}

もちろん、PがKを拡張するようにTのキーの中のP? never : PP in Exclude<keyof T, K> とも略せますが、どちらも「TからKに置き換えられるメンバーを取り除いた後の型P」という意味で、Exclude の使用はここでは繰り返しません(後に対応するトピックがあります)。

// 解決策2
type MyOmit<T, K extends keyof any> = {
  [P in Exclude<keyof T, K>]: T[P]
}
皆の投稿またはAI解答からも解答例が見つかるかもしれませんよ。