gpt4 book ai didi

typescript - 如何使用 postMessage 强类型化 TypeScript web worker 文件?

转载 作者:搜寻专家 更新时间:2023-10-30 20:57:11 26 4
gpt4 key购买 nike

我有一个 web worker,我想用 TypeScript 编写。

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

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

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

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

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

最佳答案

如果您检查 compiler options您会看到 --lib 有一个 webworker 选项。问题是你不能同时编译常规代码和 web worker 代码。你可以将你的网络 worker 代码放在一个单独的文件夹中,它有自己的 tsconfig.json 并单独复制它:

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

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

tsc .\sample.ts -lib es2015,webworker

关于typescript - 如何使用 postMessage 强类型化 TypeScript web worker 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48950248/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com