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

Kei*_*ith 12 web-worker typescript typescript-typings

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

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

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

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

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

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

Tit*_*mir 11

如果您检查编译器选项,您将看到--lib. 问题是你不能同时为 web worker 编译常规代码和代码。您可以将您的 Web Worker 代码放在一个单独的文件夹中,并单独将其tsconfig.json合并:

"compilerOptions" : {
    "target": "es2015",
    "lib": [
        "es2015"
        "webworker"
    ]
}
Run Code Online (Sandbox Code Playgroud)

或者您可以为 webworker 代码显式调用编译器:

tsc .\sample.ts -lib es2015,webworker
Run Code Online (Sandbox Code Playgroud)