问题 #
从 T
中,选择一组类型不可分配给 U
的属性。
interface Model {
name: string
count: number
isReadonly: boolean
isEnable: boolean
}
type case1 = OmitByType<Model, boolean> // { name: string; count: number }
type case1 = OmitByType<Model, string> // { count: number; isReadonly: boolean; isEnable: boolean }
type case1 = OmitByType<Model, number> // { name: string; isReadonly: boolean; isEnable: boolean }
解答 #
type OmitByType<T, U> = { [ K in keyof T as T[K] extends U ? never : K ]: T[K] }
拆分 #
- 利用断言
T[K] extends U
来排除U
类型