美文网首页
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