类型工具
Awaited<Type>
Awaited<Type> 用来取出 Promise 的返回值类型。
type A = Awaited<Promise<string>>; // string
type B = Awaited<Promise<Promise<number>> // number如果它的参数类型不是 Promise, 那么就会原样返回。
type C = Awaited<number | Promise<boolean>>; // number| booleanConstructorParameters<Type>
ConstructorParameters<Type> 用于提取构造方法 Type 的参数类型,组成一个元组类型返回。
// [x: string, y: number]
type T1 = ConstructorParameters<new (x: string, y: number) => object>;
// [x?: string, y?: number]
type T2 = ConstructorParameters<new (x?: string, y?: number) => object>;它可以返回一些内置构造方法的参数类型:
// [message?: string]
type T1 = ConstructorParameters<ErrorConstructor>;
// string[]
type T2 = ConstructorParameters<FunctionConstructor>;
// [pattern: string|RegExp, flags?: string]
type T3 = ConstructorParameters<RegExpConstructor>;如果参数类型不是构造方法,就会报错。
对于 any 和 never 两个特殊值,分别返回 unknown[] 和 never
Exclude<UnionType, ExcludedMembers>
Exclude<UnionType, ExcludedMembers> 用来从联合类型 UnionType 中排除 ExcludedMembers,组成一个新的联合类型返回。
Extract<Type, Union>
Extract<Type, Union> 用来从联合类型 Union 中提取 Type,组成一个新的联合类型返回。
如果参数类型 Union 不包含在联合类型 UnionType 中,则返回 never 类型。
Instancetype<Type>
Instancetype<Type> 提取构造函数的返回值类型(即实例类型),参数 Type 是一个构造函数,等同于构造函数 ReturnType<Type>
在上面示例中, typeof C 是 C 的构造方法类型,然后 InstanceType 就能获得到 C 的实例类型。
如果类型参数不是构造方法,就会报错。
如果类型参数是any或 never 两个特殊值,分别返回 any 和 never。
NonNullable<Type>
NonNullable<Type> 用来从联合类型 Type 中排除 null 和 undefined,组成一个新的类型返回。也就是说返回 Type 的非空类型版本。
Omit<Type, Keys>
Omit<Type, Keys> 用来从类型 Type 中排除 Keys,组成一个新的类型返回。
OmitThisParameter<Type>
OmitThisParameter<Type> 用来从函数类型 Type 中排除 this 参数,组成一个新的类型返回。
如果函数没有 this 参数,则返回原始函数类型。
Parameters<Type>
Parameters<Type> 提取构造函数 Type 的参数类型,组成一个元组类型返回。
对于 any 和 never 两个特殊值,分别返回 unknown[] 和 never。
Partial<Type>
Partial<Type> 用来将类型 Type 中的所有属性变成可选,组成一个新的类型返回。
Pick<Type, Keys>
Pick<Type, Keys> 用来从类型 Type 中提取 Keys,组成一个新的类型返回。
Readonly<Type>
Readonly<Type> 用来将类型 Type 中的所有属性变成只读,组成一个新的类型返回。
我们可以自定义类型工具Mutable<Type>,将参数类型的所有属性变成可变属性。
Record<Keys, Type>
Record<Keys, Type> 用来创建一个类型为 Type,键名为 Keys 的对象,组成一个新的类型返回。
参数Keys的类型必须兼容string|number|symbol,否则不能用作键名,会报错。
Required<Type>
Required<Type> 用来将类型 Type 中的所有属性变成必选,组成一个新的类型返回。
Required<Type> 的实现如下:
在上面代码中,符号 -? 表示去除可选属性的"问号",使其变成可选属性。相对应的,符号 +? 表示增加可选属性的"问号",使其变成必选属性。
因此,前面的 Partial<Type> 的定义也可以写成下面这样。
ReadonlyArray<Type>
ReadonlyArray<Type> 用来生成一个只读数组类型,类型参数 Type 表示数组成员类型。
ReturnType<Type>
ReturnType<Type> 提取函数类型 Type 的返回值类型,作为一个新类型返回。
如果参数类型是泛型函数,返回值取决于泛型类型。如果泛型不带限制条件,就会返回 unknown。
any 和 never 两个特殊值分别返回 any 和 never
ThisParameterType<Type>
ThisParameterType<Type> 提取函数类型中 this 参数的类型。
如果函数没有 this 参数,则返回 unknown。
ThisType<Type>
ThisType<Type> 不返回类型,只用来跟其他类型组成交叉类型,用来提示 TypeScript 其他类型里面的 this 类型。
在上面的示例中,变量 helperFunctions 的类型是一个正常的对象类型与 ThisType 类型组成的交叉类型。
注意:使用这个类型工具时,必须打开 noImplicitThis 设置。
字符串类型工具
Uppercase<StringType>
Uppercase<StringType> 将字符串类型的每个字符转为大写。
Lowercase<StringType>
Lowercase<StringType> 将字符串的每个字符转为小写。
Capitalize<StringType>
Capitalize<StringType> 将字符串的第一个字符转为大写。
Uncapitalize<StringType>
Uncapitalize<StringType> 将字符串的第一个字符转为小写。
这有帮助吗?