我有一个方法可以从嵌套对象中创建扁平对象数组。
{a: 'b',
c: {d: 'e'}
}
Run Code Online (Sandbox Code Playgroud)
将
[{a: 'b'}, {d:'e'}]
Run Code Online (Sandbox Code Playgroud)
所以这个方法的返回类型是一个对象数组( Record<string, any>[])。但 Typescript 给出以下错误:
TS2769:没有与此调用匹配的重载。... 'Record<string, any>[] | 类型的参数 { [x:字符串]:任意;}' 不可分配给“ConcatArray”类型的参数。类型“Record<string,any>[]”不可分配给类型“ConcatArray”。
该方法的正确返回类型是什么_flatten:
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] }
))
);
Run Code Online (Sandbox Code Playgroud)
我猜错误信息是这样的:
Type 'Record<string, any>[]' is not assignable to type 'ConcatArray<never>'
Run Code Online (Sandbox Code Playgroud)
那是因为你使用了[].concatand[]类型never[]。
尝试改用Array.prototype.concat:
const _flatten = (obj: Record<string, any>): Record<string, any>[] =>
Array.prototype.concat(...Object.keys(obj)
.map((key: string) => (
typeof obj[key] === 'object' ? _flatten(obj[key]) : { [key]: obj[key] }
))
);
Run Code Online (Sandbox Code Playgroud)
或者你可以[]像这样输入提示:
([] as any[]).concat(/* omitted */)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2235 次 |
| 最近记录: |