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 */)