问一个typescript类型问题?
给定一条数据结构(API数组里面的个数是未知的)如下所示
const api = [
{
name: 'pageA',
table: true
},
{
name: 'pageB',
}
]
如何推导出类似这样的类型
type Result = {
pageA: boolean
pageB: unknown
}
即 name 作为key, 如果存在table即为boolean类型,否则为unknown类型ts的大神们,这个该如何写啊,百度,谷歌都折腾了,还问了gpt也不行,就是值推不出来我写的是这样的
const api = [
{
name: 'pageList',
table: true
},
{
name: 'pageAdd',
table: false
}
] as const;
type Ret<T extends readonly { name: string; table?: boolean }[]> = {
[K in T[number]['name']]: // 这里不会写
};
type Api = Ret<typeof api>;
回复
1个回答

test
2024-06-26
const api = [
{
name: 'pageList',
table: true,
},
{
name: 'pageAdd',
},
] as const;
type Ret<T extends readonly {name: string; table?: boolean}[]> = {
[K in T[number]['name']]: Extract<T[number], {name: K}> extends {
table: boolean;
}
? boolean
: unknown;
};
type Api = Ret<typeof api>;
回复

适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容