重载声明导致构建错误

时间:2014-06-28 21:20:34

标签: typescript tsc

我为postMessage提供了重载声明,以表示仅消息签名(而不是lib.d.ts三参数版本)。

declare function postMessage(message: any): void;

我没有视觉错误,红色曲线等,但我确实遇到了构建错误。

  

构建:提供的参数与呼叫目标的任何签名都不匹配。

     

构建:无法为'call'表达式选择重载。

在这一行:

postMessage(message);

这是选择我提供的重载或我做些蠢事的错误吗?

2 个答案:

答案 0 :(得分:3)

似乎是编译器的有效错误报告。以下工作正常:

declare function foo(message: any, targetOrigin: string, ports?: any): void;
declare function foo(message: any): void;

foo('asdf');

但是下面的编译错误

declare function postMessage(message: any): void;
postMessage('asdf');

同样适用于lib.d.ts根目录的其他函数,例如:

declare function blur(message: any): void;
blur('asdf');

几乎就好像declare甚至没有被解析一样。以下给出了相同的错误:

postMessage('asdf');

瞬间解决方案

使用no-default-lib引用标记:

/// <reference no-default-lib="true"/>
declare function postMessage(message: any): void;
postMessage('asdf');

答案 1 :(得分:2)

临时工作......

这是工人的临时工作......

(function(self: Worker){

    self.postMessage('a');

    self.postMessage({ etc: 'a' });

}(<any>self));

不理想,但它有效,因为Worker界面在postMessage上下文而不是self上下文时具有正确的window定义。