Typescript 数组concat的返回类型
我有一个方法,可以从嵌套对象生成一个扁平对象数组Typescript 数组concat的返回类型,typescript,Typescript,我有一个方法,可以从嵌套对象生成一个扁平对象数组 {a: 'b', c: {d: 'e'} } 将是 [{a: 'b'}, {d:'e'}] 因此,此方法的返回类型是对象数组(Record[])。但是Typescript给出了以下错误: TS2769:没有与此调用匹配的重载。 ... “Record[]|{[x:string]:any;}”类型的参数不能分配给“ConcatArray”类型的参数。类型“Record[]”不可分配给类型“ConcatArray”。 \u flatte方法的正
{a: 'b',
c: {d: 'e'}
}
将是
[{a: 'b'}, {d:'e'}]
因此,此方法的返回类型是对象数组(Record[]
)。但是Typescript给出了以下错误:
TS2769:没有与此调用匹配的重载。
...
“Record[]|{[x:string]:any;}”类型的参数不能分配给“ConcatArray”类型的参数。类型“Record[]”不可分配给类型“ConcatArray”。
\u flatte
方法的正确返回类型是什么:
const _flatten = (obj: Record<string, any>): Record<string, any>[] =>
[].concat(...Object.keys(obj)
.map((key: string) => (
typeof obj[key] === 'object' ? _flatten(obj[key]) : { [key]: obj[key] }
))
);
const\u flatten=(对象:记录):记录[]=>
[].concat(…Object.keys(obj)
.map((键:字符串)=>(
obj[key]=“object”?_展平(obj[key]):{[key]:obj[key]}
))
);
我猜错误信息如下:
Type 'Record<string, any>[]' is not assignable to type 'ConcatArray<never>'
或者您可以像这样键入提示[]
:
([] as any[]).concat(/* omitted */)
主要问题是您正在映射-这意味着结果要么是单个对象,要么是一个对象数组。您可以使用
flatMap
来解决这个问题,而且您也不需要执行[].concat(…/*mapping*/)
([] as any[]).concat(/* omitted */)