Appearance
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;