我正在使用Typescript开发浏览器代码。我想在web worker中运行一些代码。
除了编写单独的脚本文件之外,我想要实现的是拥有一个包装Webworker并提供方法run(method: Function, ...args: any[])
的类。然后我可以将这个方法与参数值一起传递给worker调用函数。我可以使用此https://www.html5rocks.com/en/tutorials/workers/basics/#toc-inlineworkers
Blob
对象来完成此工作
我遇到的问题是,我传递给run
的函数可以在其正文中调用postMessage
,这是web worker全局作用域的postMessage
,不是DOM全局范围。因此,Typescript抱怨,因为两者都有不兼容的声明。
有人有人建议这可能有用吗?
将postMessage
转换为函数体
`(postMessage as any)('Hi from web worker')
但这很难看。
将转换此lib.dom.d.ts
签名
declare function postMessage(message: any, targetOrigin: string, transfer?: any[]): void;
进入
declare function postMessage(message: any, targetOrigin?: string, transfer?: any[]): void;
(参见添加的问号)
但还有更好的东西吗?
答案 0 :(得分:2)
我遇到了同样的问题。这是我的选择:
// @ts-ignore
postMessage(result);
const postMessageOnWorker = postMessage as (message: any) => void;
postMessageOnWorker(result);
当我输入第二个参数,例如postMessage(result, "*")
时,它会导致运行时错误(至少在Chrome上如此)。因此,第二个参数不是可选的,不应存在。