我陷入了这个简单的问题:
declare function Foo<T extends string[]>(...s: [...T, number?]): void;
Foo("");
/* error: Argument of type '""' is not assignable to parameter of type 'number | undefined'.(2345) */
Foo(1); // ok
Foo("", 1); // ok
为什么最后一个元组元素是可选的,但第一个函数调用不起作用? 我也尝试通过签名重载来解决此问题,但也没有成功。
答案 0 :(得分:1)
我不太确定为什么当前版本无法正常工作。只要您不依赖推断,它实际上就会允许您传递一个空字符串:
Foo<[""]>("");
但这显然有点麻烦,所以我理解为什么它可能不受欢迎
以下类型可能适合您;它适用于您提供的情况,但我没有发现任何不当之处:
declare function Foo<T extends string[]>(...s: [...T] | [...T, number]): void;