使用 Sharedworker 发送消息

ove*_*nge 1 javascript web-worker typescript shared-worker

使用给定的 tsconfig.json,

{

    "compilerOptions": {

      "lib": ["es2015", "dom"]
    },
    "files": [
      "./1_webworker/tstut.ts",
      "./1_webworker/worker.ts"

    ]
  }
Run Code Online (Sandbox Code Playgroud)

和文件夹结构


然npm install --save @types/sharedworker。

在下面的代码中(来自./1_webworker/tstut.ts),

let worker: Worker = new Worker('worker.js');

使用sharedworker语法,声明:

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.log(e.data); // Property 'data' does not exist on type 'Event'
});
Run Code Online (Sandbox Code Playgroud)

如何向sharedworker发送消息字符串?

Fen*_*ton 5

这是 TypeScript 中的一个工作示例SharedWorker。

调用者.ts

let worker = new SharedWorker('worker.js');
worker.port.start();

worker.port.onmessage = function (e) {
    console.log('Caller Received:', e.data);
}

worker.port.postMessage('Message');
Run Code Online (Sandbox Code Playgroud)

工人.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.log('Worker Received', e.data);
        port.postMessage('Result');
    });

    port.start(); // Required when using addEventListener. Otherwise called implicitly by onmessage setter.
}
Run Code Online (Sandbox Code Playgroud)

当前它SharedWorkerGlobalScope是您从 npm 中提取的类型定义的一部分。我将提交一个拉取请求以尽快更新它。