typeA=number|string|booleantypeB=number|booleantypeFoo=Exclude<A,B>// 相当于typeFoo=string Extract 源码: typeExtract<T,U>=TextendsU?T:never 作用: 和 Exclude 相反 typeA=number|string|booleantypeB=number|booleantypeFoo=Extract<A,B>// 相当于typeFoo=number|boolean Omit 源码定义: typeOmit<T,...
typeTExclude2=Exclude<number|string|boolean,string> // 等同于 typeTExclude2=number|boolean Extract 提取T中可以赋值给U的类型 <!-- 源码 --> type Extract<T, U> = T extends U ? T : never 当T 是联合类型时,则会循环 T 类型即: (T1 extends U ? T1 : never ) | (T2 extends U ? T2...
Exclude 类型用于排除接口或类型中的某些属性或成员。通过使用 Exclude,我们可以从类型 T 中移除类型 U 中的属性,从而创建一个新类型。例如,Exclude 将生成一个新接口,其中 age 属性被移除。Extract 类型则与 Exclude 相反,它用于提取接口或类型中的某些属性或成员。使用 Extract,我们可以从类型 T ...
// 处理联合类型typeTest1='1'|'2'|'3'constobj:Extract<Test1,'1'|'2'>='1';// 1,2 OK 赋值3就会error 7.Exclude (排除/不包括) 和Extract 正好相反,也是用于处理联合类型 // Exclude源码typeExclude<T,U>=TextendsU?never:T; // 处理联合类型typeTest1='1'|'2'|'3'constobj:Exclude<Test1...
type T = Exclude<1 | 2, 1 | 3> // -> 2 很轻松地得出结果 2 根据代码和示例我们可以推断出 Exclude 的作用是从 T 中找出 U 中没有的元素,换种更加贴近语义的说法其实就是从 T 中排除 U Extract 根据源码我们推断出 Extract 的作用是提取出 T 包含在 U 中的元素,换种更加贴近语义的说法就是...
// Omit 的源码typeOmit<T,Kextendskeyofany>=Pick<T,Exclude<keyofT,K>>; 2.Pick 采集 顾名思义,可以采集 已定义对象中 自己需要的一部分形成新的定义类型。 interfaceUserObj{readonlyname:string;age:number;id:number;sex:0|1;address:string;weight:number;}// 采集需要的typePerson=Pick<UserObj,"na...
const obj: Extract<Test1, '1' | '2'> = '1'; // 1,2 OK 赋值3就会error 7.Exclude (排除/不包括) 和Extract 正好相反,也是用于处理联合类型 // Exclude源码 type Exclude<T, U> = T extends U ? never : T; // 处理联合类型
Exclude 源码: type Exclude<T, U> = T extends U ? never : T 1 作用:如果 T 是 U 的子类型则返回 never 不是则返回 T type A = number | string | boolean type B = number | boolean type Foo = Exclude<A, B> // 相当于 type Foo = string 1 2 3 4 5 6 Extract 源码: type Ext...
作用:将类型 T 的所有属性变为只读。实现:通过映射类型,为 T 中的每个属性添加 readonly 修饰符,使其不可被重新赋值。Exclude 作用:从类型 T 中排除可赋值给类型 U 的所有属性或成员。实现:通过条件类型,移除 T 中与 U 兼容的部分,生成新类型。Extract 作用:从类型 T 中提取可赋值给类型...
type Omit<T, K extends keyof any> = Pick<T, Exclude<keyof T, K>>; 1. 2. 2.Pick 采集 顾名思义,可以采集 已定义对象中 自己需要的一部分形成新的定义类型。 interface UserObj { readonly name: string; age: number; id: number;