在Object.assign上遇到TypeScript编译错误,但是一切正常

时间:2019-02-27 22:30:17

标签: typescript

显然这是一个已知问题。建议的解决方法使我的IDE停止抱怨,它可以正常运行,但是我收到Angular CLI构建TS错误,这导致我的CI / CD管道失败。

令人讨厌的行是Object.assign(...args),其中args是对象的动态大小数组,导致出现以下错误

  

错误TS2557:预期至少有1个参数,但最小值为0。

完整的代码和上下文是

_.chain(myObjects)
.groupBy((obj: MyObject) => obj.someParam)
.each((args: [MyObject, MyObject, MyObject]) => {
  Object.assign(...args);
});

第三行曾经是args: MyObject[],但是却引起了IDE错误,因此对于包括https://github.com/Microsoft/TypeScript/issues/4130在内的各种线程,我将其更改为上面的内容,但是我仍然在构建时遇到错误

如前所述,它可以运行并完美运行,Object.assign(... args)精美地合并了args数组中的所有对象。唯一的问题是编译器使我的CI / CD管道瘫痪并使之失败。

1 个答案:

答案 0 :(得分:2)

问题是Object.assign至少需要一个参数,但是类型MyObject[]可能是一个空数组。您必须以某种方式说服编译器,使得数组中至少有条目。例如:

_.chain(myObjects)
.groupBy((obj: MyObject) => obj.someParam)
.each(([target, ...rest]: MyObject[]) => {
  Object.assign(target, ...rest);
});

或者,如果您愿意使用as关键字“作弊”:

_.chain(myObjects)
.groupBy((obj: MyObject) => obj.someParam)
.each((args: MyObject[]) => {
  Object.assign(...args as [MyObject]);
});