我有这样的东西
const one = {
props: {
num:2
}
}
const two ={
props: {
name: 'j'
}
}
const packages = [one,two]
现在我想创建一个由packages
变量合并而成的变量,如下所示
Type CombineProps = {
num: number
name: string
}
使用reduce
(数组),但不能在打字稿中使用
const props = package.reduce(previous, item => {...previous, ...item.props},{})
我该如何解决? 谢谢
答案 0 :(得分:1)
在这种情况下,Typescript无法推断结果的类型。我们可以使用UnionToIntersection
(不要忘记对链接的答案进行投票)和一些类型查询来构建props
的交集类型:
const one = {
props: {
num:2
}
}
const two ={
props: {
name: 'j'
}
}
const packages = [one, two]
type UnionToIntersection<U> = (U extends any ? (k: U)=>void : never) extends ((k: infer I)=>void) ? I : never
const props = packages
.reduce((previous, item) => ({ ...previous, ...item.props }), {} as UnionToIntersection<typeof packages[number]['props']>)
props.name // string
props.num // number