美文网首页
TS类型操作 Pick + Partial + Omit

TS类型操作 Pick + Partial + Omit

作者: wyc0859 | 来源:发表于2022-03-20 14:16 被阅读0次

    Pick 主要用于提取某种数据类型的属性

    实际工作中,主要用来提取接口或 type 定义的对象类型中的属性

    interface Book {
      ISBN: string;
      book_name: string;
      book_price: number;
      book_store_count: string; //库存数量
      book_publish: string; // 出版社
    }
    //提取出3个属性
    type Picktype = Pick<Book, "ISBN" | "book_name" | "book_price">;
    let pickobj: Picktype = {
      ISBN: "101-101",
      book_name: "解放大西南",
      book_price: 23.4,
    };
    

    Required + Partial + ReadOnly + Omit

    interface Todo {
      title: string;
      completed: boolean;
      description: string;
      other?: string; //其他信息
      date?: Date; // 日期
    }
    type RTodo = Required<Todo>; //一次性全部变成必选选项的type高级类型
    type PTodo = Partial<Todo>;
    // Partial和 Required 相反, 一次性全部变成可选选项
    
    type ReadOnly<T> = {
      readonly [P in keyof T]: T[P];
    };
    type ReadTodo = ReadOnly<Todo>;
    // ReadOnly 一次性全部变成只读选项的type高级类型
    
    // 剔除不要的属性
    type OmitTodo = Omit<Todo, "description">;
    

    这些内置方法,也可以自行手写
    了解一个关键字 infer。 让我们拥有了给函数的参数定义类型变量的能力,infer 则是可以在 extends 之后的变量设置类型变量,更加细致地控制类型。
    infer P 的意思就是泛型 T 是函数类型,并且这个函数类型的返回类型是 P

    type Foo = () => CourseObj
    
    // 如果T是一个函数,并且函数返回类型是P就返回P
    type ReturnType1<T> = T extends ()=>infer P ?P:never 
    type Foo1 = ReturnType1<Foo>
    
    type Partial1<T> = {
        [K in keyof T]?:T[K]  // 遍历T类型得到 key:value,都设为?可选
    }
    

    相关文章

      网友评论

          本文标题:TS类型操作 Pick + Partial + Omit

          本文链接:https://www.haomeiwen.com/subject/gntidrtx.html