ts如何将类型推导中的或改成且?
type DataStore = {
[K in pageName]: {
page: K
data: A[K] extends { roleId: string }[] ? A[K] : never
}
}[keyof A]
interface A extends Record<pageName, unknown> {
[pageName.q]: DataA[]
[pageName.w]: DataB[]
}
enum pageName {
q = '1',
w = '2',
e = '3',
//...
}
interface DataA { roleId: string, name:string }
interface DataB { roleId: string, age: string }
let info: Record<number, DataA> | Record<number, DataB>; // 请求发过来的数据
(Object.entries(info) as unknown as [string, DataStore['data'][number]][])
.map(([page, data]) => {
// 这里data的推导类型是 DataA | DataB
// 但我希望是 DataA & DataB
})
我打算在map里面统一处理,但是现在的推导类型让我只能 拿到data.roleId
这一个值,其他的值被类型检查否了。我该如果修改,使得我能用data.
出来其他的属性呢?
回复
1个回答

test
2024-07-12
看到这篇文章才知道,我的需求是将联合类型转化为交叉类型
解法是一条黑魔法
type UnionToIntersection<U> =
(U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never
回复

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