Appearance
Typescript 进阶
第三方扩展 utility-types 在内置的基础上增强了功能
常用内置工具类型
ts
interface Props1 {
a: number;
b: string;
}
interface Props2 {
a?: number;
b?: string;
}
interface Props3 {
readony a: number;
readony b: string;
}Partial<Type>将属性都设为可选 eg:Partial<Props1>=Props2Required<Type>将属性都设为必填 eg:Required<Props2>=Props1Readonly<Type>将属性都设为必填 eg:Readonly<Props1>=Props3Record<Keys, Type>构建 Object 类型Pick<Type, Keys>选取部分属性构建 Object 类型Pick<Props1, "a" | "b">Omit<Type, Keys>剔除部分属性构建 Object 类型Exclude<Type, ExcludedUnion>排除集合里的部分可能,补集Extract<Type, Union>类型交集
ts
function toHex(num: number) {
return num.toString(16)
}Parameters<Type>返回函数的参数的类型Parameters<typeof toHex>=numberReturnType<Type>返回函数的返回值的类型ReturnType<typeof toHex>=string
第三方补充常用工具类型
取对象类型的键类型
FunctionKeys<T>NonFunctionKeys<T>MutableKeys<T>ReadonlyKeys<T>RequiredKeys<T>OptionalKeys<T>
取对象类型的值类型
ValuesType<T>
取对象类型的部分属性构建类型
PickByValue<T, ValueType>PickByValueExact<T, ValueType>OmitByValue<T, ValueType>OmitByValueExact<T, ValueType>
两对象类型之间操作(类似 lodash)
Intersection<T, U>Diff<T, U>Subtract<T, T1>Overwrite<T, U>Assign<T, U>
增强功能的
Required<T, K> 相比 Required<T> 多加了一个可选参数,可使部分属性为 required:
Required<{ a?: number; b?: string; }, "a">=>{ a: number; b?: string; }
Mutable<T> 使全部属性变成可变类型,Readonly<T> 反操作
PromiseType<T> 获取 Promise 的 resolve 类型
PromiseType<Promise<string>>=> string
嵌套对象操作
DeepReadonly<T> 所有嵌套属性都设为只读 DeepRequired<T>DeepNonNullable<T>DeepPartial<T>