TS内置工具类型

98 阅读1分钟

一、Record(记录)

将对象属性的值转化为T类型,用Record<K extends keyof any, T>

type Property = "user1" | "user2";
type User = Record<Property, string>;

const u: User = {
  user1: "张三",
  user2: "李四",
};

二、Readonly

将数组或对象的属性值转化为只读的

interface User2 {
  name: string;
  age: number;
  gender?: "male" | "female";
}

let u2: Readonly<User2> = {
  name: "王五",
  age: 10,
  gender: "male",
};
// u2.age = 30 此处会报错

三、Required(需要)

将类型的所有属性变成必选

interface User3 {
  name?: string;
  age?: number;
  gender?: "male" | "female";
}
const u3: Required<User3> = {
  name: "王五",
  age: 10,
  gender: "male",
};

四、Partial(部分的)

将类型的所有属性转化为可选属性

interface User4 {
  name: string;
  age: number;
}
const u4: Partial<User4> = {
  name: "李四",
};

五、Extract(提取)

提取联合类型中某些类型,用Extract<T,U>,表示从T中提取出U

type User5 = Extract<string | number | (() => void), Function>; // ()=>void
const u5: User5 = () => {};

六、Exclude(排除)

移除联合类型中某些类型,用Exclude<T,U>,表示从T中移除U

type User6 = Exclude<string | number | (() => void), Function>;
const u6: User6 = 123;

七、Pick(挑选)

从类型中挑选出一些属性

type User7 = {
  name: string;
  age: number;
  gender: string;
};

type U7 = Pick<User7, "name" | "age">;
const user: U7 = {
  name: "张三",
  age: 20,
};

八、Omit(删去)

从类型中移除一些属性,Omit<T,K> 从T中取出 除去K的其他所有属性

interface User8 {
  name: string;
  age: number;
  gender: string;
}
type U8 = Omit<User8, "age" | "gender">;
const u8: U8 = {
  name: "张三",
};

九、NonNullable(不可空)

去除类型中的null和undefined

type U9 = NonNullable<string[] | null | undefined>; //string[]

十、Parameters

获取函数的参数类型所组成的元组类型

type U10 = Parameters<(a: number, b: string) => void>; // [number,string]

十一、ReturnType

获取函数的返回值类型

type Func = (value: string) => string;
const u11: ReturnType<Func> = "1";