开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 10 天,点击查看活动详情
获取枚举类型key组成的联合类型和枚举类型value组成的联合类型
正好遇到一个问题。怎么获取枚举类型的key的联合类型,和枚举类型的值的联合类型。,感觉没什么道理,但是就是这样解决的。这个解决方法很niu,记录一下子
enum ENUM_A{
a='n',
b="t",
c="h"
}
// 获取枚举的 value
type IValue = `${ENUM_A}` // "n" | "t" | "h"
// 获取枚举的 key
type IKey = keyof typeof ENUM_A // "a" | "b" | "c"
// 获取枚举的key和value组成的联合类型
type IKeyValue = keyof typeof ENUM_A |`${ENUM_A}` // "a" | "b" | "c" | "n" | "t" | "h"
Record (将联合类型映射成指定类型的对象)
紧急复习一下 内置工具类型,Record ,第一个泛型的所有联合类型当成新类型的key,第二个泛型当成新类型的值的类型
type Record1<K extends string | number | symbol, T> = {
[P in K]: T
}
type Property = 'user1' | 'user2'
type User = Record1<Property, string>
// type User = {
// user1: string;
// user2: string;
// }
Readonly (将一个类型的所有属性都搞成只读的) 针对的是复杂类型
内置的Readonly 工具类型,接受一个类型,然后将所有的属性都改成只读属性
Requrired 和 Readonly 是一个非常类似的东西,属性后面加一个 -? 就是删除了可选符号,反过来加上?,映射的类型就是可选属性了
type User = {
user1: string
user2: string
}
type MyReadonly<T> = {
readonly [K in keyof T]: T[K]
}
type ReadonlyUser = MyReadonly<User>
Extract(从第一个联合类型中提取第二个泛型) 提取
type User = {
user1: string
user2: string
}
type ReadonlyUser = Extract<keyof User,'user1'>
Exclude (从第一个联合类型中移除出第二个类型) 和提取正好对应
Pick (从第一个泛型类型中挑出匹配第二个类型的属性)
Pick 接受两个泛型 第一个是复杂类型,第二个是第一个类型的key的字面量类型,根据后面挑选的多少,决定新类型的属性个数,值的类型保持不变
Omit (从第一个泛型类型中干掉所有和第二个联合类型匹配的属性)
Omit 和 Pick是一对,主要处理 复杂类型
NonNullable 删除掉联合类型中的null 和 undefined
获取 Parameters
Parameters 返回函数的参数组成的元组类型 ReturnType 返回函数的返回值类型
type MyRet<T extends (...arg:any) => any> = T extends (...arg:any) => infer P ? P : any
type P = ReturnType<typeof fn>