Typescript 在类型检查方面非常强大,但有时某些类型是其他类型的子集并且需要为它们定义类型检查时,它会变得乏味。
举个例子
有两种响应类型:
用户配置文件响应
1 | interface UserProfileResponse { |
登录响应
1 | interface LoginResponse { |
我们可以为 UserProfileResponse 定义类型并为 LoginResponse 选择一些属性,而不是定义相同上下文 LoginResponse 和 UserProfileResponse 的类型。
1 | type LoginResponse = Pick<UserProfileResponse, "id" | "name">; |
让我们了解一些可以帮助您编写更好代码的实用函数。
1、Uppercase
构造一个 Type 的所有属性都设置为大写的类型。
1 | type Role = "admin" | "user" | "guest"; |
2、Lowercase
构造一个 Type 的所有属性都设置为小写的类型,与大写相反。
1 | type Role = "ADMIN" | "USER" | "GUEST"; |
3、Capitalize
构造一个将 Type 的所有属性设置为大写的类型。
1 | type Role = "admin" | "user" | "guest"; |
4、Uncapitalize
构造一个将 Type 的所有属性设置为 uncapitalize 的类型,与首字母大写相反。
1 | type Role = "Admin" | "User" | "Guest"; |
5、Partial
构造一个类型,其中 Type 的所有属性都设置为可选。
1 | interface User { |
6、Required
构造一个类型,该类型由设置为 required 的 Type 的所有属性组成,Opposite的对面。
1 | interface User { |
7、Readonly
构造一个类型,该类型由设置为只读的 Type 的所有属性组成。
1 | interface User { |
8、Record
构造一个具有一组类型 T 的属性 K 的类型,每个属性 K 都映射到类型 T。
1 | interface Address { |
9、Pick
只选择键在联合类型键中的 Type 的属性。
1 | interface User { |
10、Omit
Omit其键在联合类型键中的 Type 属性。
1 | interface User { |
11、Exclude
构造一个具有 Type 的所有属性的类型,除了键在联合类型 Excluded 中的那些。
1 | type Role = "ADMIN" | "USER" | "GUEST"; |
12、Extract
构造一个具有 Type 的所有属性的类型,其键在联合类型 Extract 中。
1 | type Role = "ADMIN" | "USER" | "GUEST"; |
13、NonNullable
构造一个类型,其中 Type 的所有属性都设置为不可为空。
1 | type Role = "ADMIN" | "USER" | null; |
英文:https://devsmitra.medium.com/13-typescript-utility-a-cheat-sheet-for-developer-9dfd23cb1bbc