TypeScript 系列 进阶篇 (一) TS 内置泛型接口
TS 提供了许多实用的全局内置类型,可以极大地方便我们的操作。
1. Partial<Type> 可选类型接口
通过Partial<T>可以通过将传入的类型的所有属性变为可选属性,从而得到一个新的类型。
1 | interface Person { |
2. Required<Type> 必需类型接口
与 Partial 相反,Required<T> 把传入的类型T的所有属性都变为必需的,得到一个新的类型。
1 | interface Person { |
3. Readonly<Type> 只读类型接口
将传入的类型的所有属性都变为只读属性,得到一个新的类型。
1 | interface Person { |
4. Record<Key, Type>
创建一个 key 为 Key 类型、value 为 Type类型的对象类型。
1 | interface Person { |
5. Pick<Type, Keys>
挑选出 Type类型 中的 Keys 类型的属性,得到一个新的类型。一般来说,Keys为联合类型。
1 | interface Person { |
6. Omit<Type, Keys>
与 Pick 相反,移除掉 Type类型 中的 Keys 类型的属性,得到一个由剩下的属性组成一个新的类型。
1 | interface Person { |
7. Exclude<UnionType, ExcludeMember>
从联合类型 UnionType 中移除某些类型,得到一个新的类型。
1 | type MyType = Exclude<"cc" | "yy" | "princess", "princess">; |
8. Extract<Type, Union>
提取出 Type 类型中能符合 Union 联合类型的类型,得到一个新的类型。很迷惑,这不就是用 “&“ 连接两个类型么?
1 | // A 为 (x: string) => void |
9. NonNullable<Type> 非空类型
移除 Type 类型中的 null 和 undefined ,得到一个新的类型。
1 | type Person = "cc" | "yy" | undefined; |
10. Parameters<FunctionType>
提取函数类型(或 any,never 等类型)中的参数,得到一个新的 元组 类型 (或never)。
1 | declare function f1(arg: { a: number; b: string }): void; |
11. ConstructorParameters<Type>
提取构造函数中的所有参数,得到一个新的 元组 或 数组 类型(或 never )。
1 | type T0 = ConstructorParameters<ErrorConstructor>; |
12. ReturnType<Type>
得到一个由函数类型的返回值类型 组成的新类型。
1 | declare function f1(): { a: number; b: string }; |
13. InstanceType<Type>
得到Type 类型中的构造函数实例的类型。
1 | class C { |
14. ThisParameterType<Type>
得到函数类型 Type 中的 this 参数的类型,如果没有 this 参数,则为unknown类型。
1 | function toHex(this: Number) { |
15. OmitThisParameter<Type>
移除函数类型 Type 中的 this 参数,得到一个新的类型。如果没有 this 参数,则直接返回 Type 类型;如果有 this 参数,则返回一个移除了 this 参数的新的函数类型。
1 | function toHex(this: Number) { |
16. ThisType<Type>
不会返回新的类型,而是用于指定上下文中的 this 的类型为 Type。
1 | type ObjectDescriptor<D, M> = { |
17. Uppercase<StringType>
将 string 字面量类型 全部转化为大写,得到一个新的类型;
1 | type UpperStr = Uppercase<"cc" | "yy">; |
18. Lowercase<StringType>
将 string 字面量类型 全部转化为小写,得到一个新的类型;
1 | type LowerStr = Lowercase<"CC" | "YY">; |
19. Capitalize<StringType>
将 string 字面量类型 首字母转化为大写,得到一个新的类型;
1 | type CapitalizeStr = Capitalize<"cc" | "yy">; |
20. Uncapitalize<StringType>
将 string 字面量类型 首字母转化为小写,得到一个新的类型;
1 | type UncapitalizeStr = Uncapitalize<"CCcc" | "YYyy">; |
