Skip to content
On this page

语法

Omit< key:value,key>

  • 作用:基于已经声明的类型进行属性剔除获得新类型
  • 用例:
     type User = {
         id: string;
         name: string;
         email: string;
     };
     type UserWithoutEmail = Omit<User, "email">;// UserWithoutEmail ={id: string;name: string;}
    

Pick< key:value,key>

  • 作用:从KeyValue中挑选出部分Key对应的类型当作新类型使用(与omit相反,omit是剔除声明项,pick是挑选声明项)
  • 用例:
   interface Todo {
       title: string;
       description: string;
       completed: boolean;
   }
   type TodoPreview = Pick<Todo, "title" | "completed">;
   const todo: TodoPreview = {
       title: "Clean room",
       completed: false
   };

Exclude<T,U>

  • 作用:T中取T、U交集的补集
  • 与Omit作比较:
    • Omit左右两个参数属于不同类型,左是一个完整的类型,包含key、value
    • Exclude左右两个参数属于同种类型
  • 用例
   type T0 = Exclude<"a" | "b" | "c", "a">;      
   // "b" | "c"
   type T1 = Exclude<"a" | "b" | "c", "a" | "b">;     
   // "c"
   type T2 = Exclude<string | number | (() => void), Function>; 
   // string | number

比较

  • 相同点
    • 三种工具类都是使用已有的类型进行属性过滤获得新的类型
    • Omit和Exclude都是做属性剔除
    • Omit和Pick的参数类型都是<{key:value},key>
  • 不同点
    • Exclude的参数类型没有限制,可以是字面量也可以是具体的类型如string、boolean等,而Omit和Pick的第二参数则必须是第一参数的子属性
  • Pick搭配Exclude实现Omit:Exclude先剔除不要的键名,挑出想要的键名,Pick再从键值对中根据键名挑选出来。 实现公式:Omit=Pick<T,Exclude<keyof T,K>>。其中:T:<key,value> K:key