TS项目开发中,或多或少会遇到一些TS类型与类型之间需转换之处,这时你会怎么做。强大TS类型系统贴心的为开发者提供了部分常用的内置全局工具类型。
我们一起来看看吧。GO GO GO
Partial
其构造一个将 Type
的所有属性设置为可选的类型。此工具将返回一个表示给定类型的所有子集的类型。
示例:
PerInfo类型包含两个属性name和age
ts
interface PerInfo {
name: string;
age: number;
}
Partial 将PerInfo接口中的属性变为可选属性
ts
type Person=Partial<PerInfo>
相当于定义了如下类型
ts
type Person = {
name?: string;
age?: number;
}
Partial源码
ts
type Partial<T> = { [P in keyof T]?: T[P] | undefined; }
Required
与 Partial
相反。Required把传入泛型Type的属性都变为必选项。
ts
interface Props {
a?: number;
b?: string;
}
const obj: Props = { a: 5 };
const obj2: Required<Props> = { a: 5 };
// Property 'b' is missing in type '{ a: number; }' but required in type 'Required<Props>'.
Required源码
ts
type Required<T> = { [P in keyof T]-?: T[P]; }
Pick
从泛型Type中获取指定属性的类型,相当于得到的新类型只包含你所指定的泛型第二个参数的属性的类型。
示例:
PerInfo类型包含两个属性name和age
ts
interface PerInfo {
name: string;
age: number;
sex: string;
}
Partial 将PerInfo接口中的属性变为可选属性
ts
type Person=Pick<PerInfo,'name'|'age'>
相当于定义了如下类型
ts
type Person = {
name: string;
age: number;
}
Pick源码
ts
type Pick<T, K extends keyof T> = { [P in K]: T[P]; }
Record
构造一个对象类型,其属性键为 Keys
,其属性值为 Type
。可用于将一种类型的属性映射到另一种类型。
示例:
js
interface CatInfo {
age: number;
breed: string;
}
type CatName = "miffy" | "boris" | "mordred";
type Cats = Record<CatName, CatInfo>
const cats: Record<CatName, CatInfo> = {
miffy: { age: 10, breed: "Persian" },
boris: { age: 5, breed: "Maine Coon" },
mordred: { age: 16, breed: "British Shorthair" },
};
cats.boris;
Record源码
ts
type Record<K extends string | number | symbol, T> = { [P in K]: T; }
Readonly
构造一个将 Type
的所有属性设置为 readonly
的类型,这意味着构造类型的属性不能重新分配。
示例:
Omit
通过从 Type
中选择所有属性然后删除 Keys
(字符串字面或字符串字面的并集)来构造一个类型。与 Pick
相反。
示例:
ts
// 定义User类型
interface User {
name: string;
age: number;
email: string;
isActive: boolean;
creditCardDetails: number;
}
Omit
构造不包含 creditCardDetails
属性的新类型 LiUser
ts
type LiUser = Omit<User, "creditCardDetails">;
Omit
构造不包含多个属性 的新类型 TiUser
。
ts
type TiUser = Omit<User, "email" | "isActive">;
Omit
源码
ts
type Omit<T, K extends string | number | symbol> = { [P in Exclude<keyof T, K>]: T[P]; }
未完待续......