数组对象的 key 的类型
有一个数组如下:
const list = [
{
key: '001',
value: 'xxx',
},
{
key: '002',
value: 'xxx'
},
{
key: '003',
value: 'xxx'
},
// ...
]
如何生成一个联合类型 Keys:
type Keys = '001' | '002' | '003' | ...
对象的 key 的类型
有一个对象如下:
const obj = {
'001': {
label: '001',
value: 'xxx',
},
'002': {
label: '002',
value: 'xxx'
},
'003': {
label: '002',
value: 'xxx'
},
// ...
}
如何生成一个联合类型 Keys:
type Keys = '001' | '002' | '003' | ...
根据 @kkopite 的回复,可以这样做:
const obj = {
'001': {
label: '001',
value: 'xxx',
},
'002': {
label: '002',
value: 'xxx'
},
'003': {
label: '002',
value: 'xxx'
},
// ...
} as const
type P = keyof typeof obj
如果给 obj 声明一个类型:
type Obj = {
[key: string]: {
label: string
value: string
}
}
const obj: Obj = {
'001': {
label: '001',
value: 'xxx',
},
'002': {
label: '002',
value: 'xxx'
},
'003': {
label: '002',
value: 'xxx'
},
// ...
} as const
type P = keyof typeof obj
推导将会失效:
请问如何解决呢?
你已经指定了
obj
的类型为Obj
,此时keyof typeof obj
就是等价于keyof Obj
了,这种情况可以通过定义一个函数加上泛型来解决: