1

postMessage(lib.d.ts の 3 引数バージョンではなく) メッセージのみの署名を表すために、オーバーロードされた宣言を提供しました。

declare function postMessage(message: any): void;

視覚的なエラーや赤い波線などは表示されませんが、ビルド エラーは表示されます。

ビルド: 指定されたパラメーターは、呼び出しターゲットの署名と一致しません。

ビルド: 'call' 式のオーバーロードを選択できませんでした。

この行で:

postMessage(message);

これは、私が提供したオーバーロードを選択する際のバグですか、それとも何か愚かなことをしていますか?

4

2 に答える 2

3

Compler の有効なバグ レポートのようです。以下はうまくいきます:

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 に答える