type EnumToObject<T extendsobject>={[P in keyof T]: T[P]}// enum Direction {// Up = "UP",// Down = "DOWN",// Left = "LEFT",// Right = "RIGHT",// }// Get the type of the Direction enum itself, which includes all the keys and values defined in the enum (an object type).// type DirectionObject = EnumToObject<typeof Direction>
type DeepMerge<T, U>={[K in keyof T | keyof U]: K extendskeyof T
? K extendskeyof U
? T[K]extendsobject? U[K]extendsobject? DeepMerge<T[K], U[K]>: U[K]: U[K]: T[K]: K extendskeyof U
? U[K]: never;}
实现一个 TupleToUnion 工具类型,它可以将一个元组类型转换为联合类型。
type TupleToUnion<T>= T extends[infer First,...infer Rest]? First | TupleToUnion<Rest>: never
实现一个 IsArray 工具类型,它接受一个类型参数 T ,并返回 true 或 false ,表示 T 是否是数组类型。
type IsArray<T>= T extendsany[]?true:false;
实现一个 FirstElement 工具类型,它可以从一个元组类型中提取出第一个元素的类型。如果传入的类型不是元组,则返回 never 。
type FirstElement<T>= T extends[infer First,...any[]]? First : never
实现一个 DeepFlatten 工具类型,它可以将嵌套的数组类型递归展平为单层数组类型。
type DeepFlatten<T>= T extends(infer U)[]// Infer every element type.? U extendsany[]? DeepFlatten<U>: U
: T
type DeepPick<T, K extendsstring>= K extends`${infer First}.${infer Rest}`// Way to manipulate string.? First extendskeyof T
?{[P in First]: DeepPick<T[P], Rest>}: never
: K extendskeyof T
?{[P in K]: T[P]}: never
实现一个 DeepOmit 工具类型,它可以递归地从对象类型中删除指定路径的属性。
type DeepOmit<T, K extendsstring>= K extends`${infer First}.${infer Rest}`? First extendskeyof T
?{[P in keyof T]: P extendsFirst? DeepOmit<T[P], Rest>: T[P]}: T
: Omit<T, K>
评论 | Comments