Skip to content

OmitByType

约 224 字小于 1 分钟

2022-12-01

题目

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 }>>,
]

参考