OmitByType
题目
Github: OmitByType
从 T
中选取一组属性,这些属性的类型不可分配给 U
。
type OmitBoolean = OmitByType<{
name: string
count: number
isReadonly: boolean
isEnable: boolean
}, boolean> // { name: string; count: number }
解题思路
略。
答案
type OmitByType<T, U> = {
[P in keyof T as T[P] extends U ? never : P]: T[P]
}
验证
interface Model {
name: string
count: number
isReadonly: boolean
isEnable: boolean
}
type cases = [
Expect<Equal<OmitByType<Model, boolean>, { name: string, count: number }>>,
Expect<Equal<OmitByType<Model, string>, { count: number, isReadonly: boolean, isEnable: boolean }>>,
Expect<Equal<OmitByType<Model, number>, { name: string, isReadonly: boolean, isEnable: boolean }>>,
]