学习typescript中 ,有一个小伙伴提出了一个问题
const a = {
a:'1',
b:'2',
c:'3'
}
复制代码
如何取到每个键上的值 ,组成一个联合类型 ? 即得到一个类型为
type forA = "1" | "2" | "3"
复制代码
一位大神给出了答案
const a = {
a:'1',
b:'2',
c:'3'
} as const
type t = T[keyof T]
type forA = t //"1" | "2" | "3"
复制代码
我已经开始迷迷糊糊了。接着提问者又延伸了这个问题
const a = {
a:'1',
b:'2',
c:'3',
d:{
f:'4'
}
}
复制代码
如何取到每个键上的值 (包括一个深层嵌套),组成一个联合类型 ? 即得到一个类型为
type forA = "1" | "2" | "3" | "4"
复制代码
过了一会,大神又拿出了回答
const a = {
a:'1',
b:'2',
c:'3',
d:{
f:'4'
}
} as const
type t = {
[K in keyof T]:T extends object
? t
: T[K]
}[keyof T]
type forA = t //"1" | "2" | "3" | "4"
复制代码
什么?类型里面还有递归!对知识查漏补缺,列下以下几点
定义变量时的 as const
type 内的[K in keyof T]
extends A ? B : C 类型的三目表达式?
类型递归?
最后的 [keyof T]
keyof 和 typeof
keyof 获得接口或者type alias 的键
interface interfaceNumber{
one:string,
two:number
}
type typeNumber = {
three:stri