如何使用postMessage强烈键入TypeScript Web worker文件?

时间:2018-02-23 14:37:39

标签: typescript web-worker typescript-typings

我有一个我想用TypeScript编写的Web worker。

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

这意味着当我尝试使用postMessage时,TypeScript会抛出错误。

有很多方法可以解决这个问题,例如通过重新定义函数declare function postMessage(message: any),但其中大部分都是丑陋的kludges - TS的重点是检查类型,声明我自己的虚拟类型会失败。

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

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

1 个答案:

答案 0 :(得分:4)

如果您选中compiler options,您会看到--lib有一个网络工具选项。问题是您无法同时为Web worker编译常规代码和代码。您可以将Web工作者代码放在一个单独的文件夹中,并使用它自己的tsconfig.json并单独复制它:

"compilerOptions" : {
    "target": "es2015",
    "lib": [
        "es2015"
        "webworker"
    ]
}

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

tsc .\sample.ts -lib es2015,webworker