【发布时间】:2013-12-23 17:50:55
【问题描述】:
我希望其中一个 TypeScript 能够在此处投入使用。我是绝对类型贡献者之一,我一直致力于修复与 Q.d.ts 相关的损坏测试。
q-tests.ts 中的以下测试在 TS 0.9.5 之前有效:
var eventualAdd = Q.promised((a: number, b: number) => a + b);
promised 方法定义如下所示:
export function promised<T>(callback: (...args: any[]) => T): (...args: any[]) => Promise<T>;
但是现在我们在 0.9.5 上,这个测试没有编译并且失败并出现这个错误:
error TS2082: Supplied parameters do not match any signature of call target:
Call signatures of types '(a: number, b: number) => number' and '(...args: any[]) => {}' are incompatible:
Call signature expects 0 or fewer parameters.
error TS2087: Could not select overload for 'call' expression.
我尝试调整测试以获得更深入的了解 - 例如通过这样指定类型:
var eventualAdd = Q.promised<number>((a: number, b: number) => a + b);
但我没有得到更多信息 - 它以类似的方式失败:
error TS2082: Supplied parameters do not match any signature of call target:
Call signatures of types '(a: number, b: number) => number' and '(...args: any[]) => number' are incompatible:
Call signature expects 0 or fewer parameters.
error TS2087: Could not select overload for 'call' expression.
谁能提供任何见解?我没有看到描述打字方式的任何问题。它看起来正确,但它不起作用。我似乎记得使用 TS 0.9.5 现在默认将任何内容视为 {}?这会将...args: any[] 回调签名从水中吹走吗?我希望不会!
【问题讨论】:
-
语法似乎不正确。该方法应该传递一个回调并返回一个
Promise<T>,是这样吗? -
我可以复制goo.gl/ddrCTW
-
你可能是对的 Ryan... 这两个参数都必须被描述为可选的,这有点遗憾,因为在这个例子中它们明确地不是可选的,因为它们都被使用了。这是 TypeScript 的限制吗?
标签: typescript q definitelytyped