相关疑难解决方法(0)

与工作人员一起构造TypeScript项目

我应该如何构建一个包含主线程(DOM)脚本和工作程序的项目?例如:

主要

// This file must have DOM types, but not worker types.

const worker = new Worker('worker.js');

worker.onmessage = (event) => {
  // Ideally, I should be able to reference types from the worker:
  const data = event.data as import('./worker').HelloMessage;
  console.log(data.hello);
};
Run Code Online (Sandbox Code Playgroud)

工人

// This file must have worker types, but not DOM types.
// The global object must be one of the worker globals (how do I pick which?)

const helloMessage = {
  hello: 'world',
};

export type …
Run Code Online (Sandbox Code Playgroud)

web-worker typescript service-worker

29
推荐指数
1
解决办法
2208
查看次数

如何使用 postMessage 强输入 TypeScript Web Worker 文件?

我有一个我想用 TypeScript 编写的网络工作者。

问题是Worker.postMessage- TypeScript 假设每个脚本都将在窗口上下文中加载,因此 expect Window.postMessage,它具有不同的语法。

这意味着当我尝试使用postMessage.

有办法解决这个问题,例如通过重新定义函数 declare function postMessage(message: any),但其中大多数充其量只是丑陋的杂物 - TS 的重点是检查类型,声明我自己的虚拟对象会打败它。

出于同样的原因 - window(及其上下文中的所有内容)在此上下文中不可用,并且应被 TS 识别为错误。例如alert('message')应该导致 TS 警告,而不是运行时错误。

有什么办法可以让文件获取实际定义(来自webworker.es2016.d.ts)并以某种方式告诉 TypeScript 这段代码将在工作上下文中运行而不是在窗口中运行?

web-worker typescript typescript-typings

12
推荐指数
1
解决办法
6323
查看次数

无法在'DedicatedWorkerGlobalScope'上执行'postMessage':提供的值无法转换为序列

我收到以下错误

未捕获的TypeError:无法在'DedicatedWorkerGlobalScope'上执行'postMessage':提供的值无法转换为序列.

在网络工作者的这一行:

postMessage("hi", "http://localhost:8000");
Run Code Online (Sandbox Code Playgroud)

(事实上​​,这就是整个网络工作者).

基本文件包含:

var myWorker = new Worker("test.js");
myWorker.onmessage = function (e) {
    console.log('Message received from worker');
};
Run Code Online (Sandbox Code Playgroud)

我不确定它抱怨哪个值,我不确定将它转换为"序列"意味着什么.

web-worker

6
推荐指数
1
解决办法
5049
查看次数