我有一个我想用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这个代码将在工作者上下文而不是窗口中运行?
答案 0 :(得分:4)
如果您选中compiler options,您会看到--lib
有一个网络工具选项。问题是您无法同时为Web worker编译常规代码和代码。您可以将Web工作者代码放在一个单独的文件夹中,并使用它自己的tsconfig.json
并单独复制它:
"compilerOptions" : {
"target": "es2015",
"lib": [
"es2015"
"webworker"
]
}
或者您可以为webworker代码显式调用编译器:
tsc .\sample.ts -lib es2015,webworker