我收到此错误 Expected at least 1 arguments, but got 0 or more
来自:
if (initialValues.length > 0) {
return Object.assign(...initialValues);
}
我猜它是在抱怨 initialValues
可能是空的。但是,if 条件保证它不会为空。我该怎么做才能让打字稿意识到这一点?
答案 0 :(得分:4)
允许 length
check as a type guard 被认为“太复杂”而无法添加到 TypeScript(感谢 @jcalz 提供链接!)。
您至少可以采取三种方法:
由于它不是从 length
检查中获得的,我可能会明确地给它目标对象,如下所示:
const [target, ...sources] = initialValues;
if (target) {
return Object.assign(target, ...sources);
}
对此很满意。
This answer 展示了如何为非空数组定义类型:
type NonEmptyArray<T> = [T, ...T[]];
如果在编译时知道 initialValues
总是至少有一个元素,请使用该类型定义它:
let initialValues: NonEmptyArray<YourObjectType>;
然后您可以删除 if
,因为您知道它总是正确的:
return Object.assign(...initialValues);
但是如果它可以为空并且需要运行时检查,您可以定义一个类型保护函数:
function isNotEmpty<T>(arr: T[]): arr is NonEmptyArray<T> {
return arr.length > 0;
}
然后是:
if (isNotEmpty(initialValues)) {
return Object.assign(...initialValues);
}