1

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

declare function postMessage(message: any): void;

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

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

构建:无法为“调用”表达式选择重载。

在这条线上:

postMessage(message);

这是选择我提供的过载的错误还是我在做一些愚蠢的事情?

4

2 回答 2

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');
于 2014-06-29T06:31:13.010 回答
2

临时工...

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

(function(self: Worker){

    self.postMessage('a');

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

}(<any>self));

不理想,但它可以工作,因为接口对何时在上下文而不是上下文中Worker有正确的定义。postMessageselfwindow

于 2014-07-01T10:20:28.890 回答