#typescript #tsc
#typescript #tsc
Вопрос:
Я предоставил перегруженное объявление для postMessage
представления подписи только для сообщений (а не версии lib.d.ts с тремя аргументами).
declare function postMessage(message: any): void;
Я не получаю визуальных ошибок, красных закорючек и т. Д., Но я получаю ошибку сборки.
Сборка: предоставленные параметры не соответствуют какой-либо сигнатуре цели вызова.
Сборка: не удалось выбрать перегрузку для выражения ‘call’.
В этой строке:
postMessage(message);
Это ошибка при выборе перегрузки, которую я предоставил, или я делаю что-то глупое?
Ответ №1:
Похоже на действительный отчет об ошибке для дополнения. Следующее работает нормально:
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. Круто — я поднял это как ошибку: typescript.codeplex.com/workitem/2588 — Я также попытался добавить его в
Window
интерфейс. Радости тоже нет. Все работает на игровой площадке, поэтому, возможно, это уже исправлено для следующей версии.2. Я полагаю, что ошибка может быть и в playground … языковая служба также работает в VS (что и использует playground) js
tsc
также генерируется… это то, что playground показывает на RHS
Ответ №2:
Временное решение…
Это временное решение для рабочих…
(function(self: Worker){
self.postMessage('a');
self.postMessage({ etc: 'a' });
}(<any>self));
Не идеально, но это работает, потому Worker
что интерфейс имеет правильное определение postMessage
when в self
контексте, а не window
context .