题目描述
From T
, pick a set of properties whose type are not assignable to U
.
For Example
type OmitBoolean = OmitByType<{
name: string
count: number
isReadonly: boolean
isEnable: boolean
}, boolean> // { name: string; count: number }
题解
// ============= Test Cases =============
import type { Equal, Expect } from './test-utils'
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 }>>,
]
// ============= Your Code Here =============
type OmitByType<T, U> = {
[P in keyof T as
T[P] extends U
? never
: P
]: T[P]
}
条件类型
type OmitByType<T, U> = {
[P in keyof T as
T[P] extends U
? never
: P
]: T[P]
}
-
遍历
T
的每个键P
:[P in keyof T]
:遍历T
的所有键
-
条件映射:
-
as T[P] extends U ? never : P
:-
如果
T[P]
的类型可以赋值给U
,则映射为never
,从而排除该键 -
否则,保留键
P
-
-
-
类型赋值:
T[P]
:保留T
中的每个键P
的值