Skip to content

TS 类型工具

​ 一些 TS 工具能够让我们根据现有类型快速生成新的类型

1.pick

​ pick 从类型中选择一个属性凑成新的类型

ts
interface Person {
  name: string;
  age: number;
  salary: number;
}

type OK01 = Pick<Person, "age">; // {age:number}
interface Person {
  name: string;
  age: number;
  salary: number;
}

type OK01 = Pick<Person, "age">; // {age:number}

2.omit

​ omit 从类型中剔除一个属性凑成新的类型

ts
interface Person {
  name: string;
  age: number;
  salary: number;
}
type Obj01 = Omit<Person, "age">; // Obj1 like {name:string,salary:number};
type Obj02 = Omit<Omit<Person, "age">, "name">; // Obj2 like {salary:number}
interface Person {
  name: string;
  age: number;
  salary: number;
}
type Obj01 = Omit<Person, "age">; // Obj1 like {name:string,salary:number};
type Obj02 = Omit<Omit<Person, "age">, "name">; // Obj2 like {salary:number}

3.keyof

​ keyof 可以根据现有的类型生成一个定义,这个定义为属性名选择器。

ts
interface Person {
  name: string;
  age: number;
}
type Keys = keyof Person; // Keys like "age"|"name"
interface Person {
  name: string;
  age: number;
}
type Keys = keyof Person; // Keys like "age"|"name"

4.record

​ record 可以定义一个对象类型,可以定义 key、定义 key 的 value。

js
type Data = Record<"name" | "address", string>;
//{name:string,address:string}
type Data = Record<"name" | "address", string>;
//{name:string,address:string}

5.partial

​ partil 可以将类型中的所有属性定义为可选,并返回这个类型

ts
interface Person {
  name: string;
  age: number;
}
type P = Partial<Person>;
// P的类型为:{name?:string,age?:number}
interface Person {
  name: string;
  age: number;
}
type P = Partial<Person>;
// P的类型为:{name?:string,age?:number}

typeof

typeof 可以根据现有的数据来定义类型。

ts
const person = { username: "Mark", age: 18 };

type Person = typeof person;
const person = { username: "Mark", age: 18 };

type Person = typeof person;