С данным tsconfig.json,
{
"compilerOptions": {
"lib": ["es2015", "dom"]
},
"files": [
"./1_webworker/tstut.ts",
"./1_webworker/worker.ts"
]
}
Запускал npm install --save @types/sharedworker.
В приведенном ниже коде (из ./1_webworker/tstut.ts),
let worker: Worker = new Worker('worker.js');
для использования синтаксиса совместной работы, объявленного:
let worker: SharedWorker.SharedWorker = new SharedWorker('worker.js');
но ниже ошибка.
worker.postMessage('do some work'); // Property 'postMessage' does not exist on type 'SharedWorker'
worker.addEventListener('message', (e) => {
console.info(e.data); // Property 'data' does not exist on type 'Event'
});
Как отправить строку сообщения общему работнику?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вот рабочий пример SharedWorker на TypeScript.
caller.ts
let worker = new SharedWorker('worker.js');
worker.port.start();
worker.port.onmessage = function (e) {
console.info('Caller Received:', e.data);
}
worker.port.postMessage('Message');
worker.ts
interface SharedWorkerGlobalScope {
onconnect: (event: MessageEvent) => void;
}
const _self: SharedWorkerGlobalScope = self as any;
_self.onconnect = function (e) {
var port = e.ports[0];
port.addEventListener('message', function (e) {
console.info('Worker Received', e.data);
port.postMessage('Result');
});
port.start(); // Required when using addEventListener. Otherwise called implicitly by onmessage setter.
}
SharedWorkerGlobalScope в настоящее время является частью определения типа, которое вы извлекли из npm. Я отправлю запрос на перенос, чтобы обновить его в ближайшее время.
Я вижу postMessage в этом отвечать. Наверное, неправильно использую, не используя порт. Не уверен, насчет порта.
См. Обновленный ответ и пул реквест: github.com/DefinitiTyped/DefinitiTyped/pull/26202
Мягкий вопрос: Сэр, Могу ли я postMessage() общего работника в междоменном режиме? С выделенным веб-работником я могу
postMessage()для совместно используемого сотрудника. Запрос отредактирован