TypeScript Rest tuple parameter with intersection/union places error on wrong argument

rseugnpd  于 6个月前  发布在  TypeScript
关注(0)|答案(2)|浏览(59)

TypeScript版本: 3.2.0-dev.20181113
搜索词:

rest元组,交集,并集,错误,参数,位置错误

代码

declare function boop<T extends any[]>(...args: T & [number, string]): void;
boop(123, 456); // error
//   ~~~ <-- error on first argument
// Argument of type '[123, 456]' is not assignable to parameter 
//   of type '[number, number] & [number, string]'.
// Type '[123, 456]' is not assignable to type '[number, string]'.
// Type '456' is not assignable to type 'string'.

预期行为:

我期望第二个参数( 456 )出现错误,因为那是导致失败的参数,如错误信息所示。(或者如果将其解释为无法匹配rest参数,我可能期望两个参数都出现错误。)

实际行为:

实际错误出现在第一个参数( 123 )。这是一个小问题,似乎只在上面的交集与类型参数的情况下出现(具体类型如 ...args: [number, string] & [number, string] 工作正常),但我想报告一下,以防它有一个简单的解决方法。
(自我提醒或感兴趣的非自我提醒:在一个 Stack Overflow answer 中遇到了这个问题)

** playground链接:**

🔗

相关问题:

还没有找到任何问题。有人找到任何问题吗?

oxcyiej7

oxcyiej71#

我认为工会也会出现同样的情况:

declare function boop<T extends [number, string]>(...args: T | [number, boolean]): void;
boop(123, 456); // error
//   ~~~ <-- error on first argument
// Argument of type '[123, 456]' is not assignable to parameter 
//   of type '[number, string] & [number, boolean]'.
// Type '[123, 456]' is not assignable to type '[number, string]'.
// Type '456' is not assignable to type 'string'.
zte4gxcn

zte4gxcn2#

我看到泛型甚至不需要用来重现这个:

declare function f(...args: [x: string, y: number] | []): void;
f("a", "b"); // error
//~~~ <--- error here due to a problem with the *second* argument 😕

Playground链接

相关问题