javascript - 错误 TS2554 : Expected 2-3 arguments, 但得到 1

标签 javascript typescript web-worker

使用给定的tsconfig.json

{

    "compilerOptions": {

      "lib": ["es2015", "dom"]
    },
    "files": [
      "./project1/tstut.ts",
      "./project1/worker.ts"

    ]
  }

folder structure


1)

对于下面的代码(./project1/tstut.ts),

if(window.Worker){
  console.log('Workers are available');
}
....
let worker: Worker = new Worker('worker.js');
worker.postMessage('do some work')

如何解决以下 typescript 错误?

Property 'Worker' does not exist on type 'Window'

2)

对于下面的worker代码(./project1/worker.ts),

self.addEventListener('message', (e) => {
    // console.log(e)
    if(e.data === 'do some work'){
        console.log('Worker is about to start some work');
        let count: number =0;
        for(let i: number=0; i<1000; i++){
            count += i;
        }
        self.postMessage({message:count});
    }

})

JS允许语法self.postMessage({message: count})

https://github.com/Microsoft/TypeScript/issues/582

给定scenario不适合我的情况。

如何解决 postMessage() 的以下错误?在运行 tsc

期望 2-3 个参数,但得到 1 个

最佳答案

Worker 并不依赖于 window 对象。

if (typeof(Worker) !== "undefined") {
    // Yes! Web worker support!
    // Some code.....
} else {
    // Sorry! No Web Worker support..
}

要绕过 webworker postMessage 错误,请使用 tsconfig 中的“webworker”库或以下

const ctx: Worker = self as any;
...
ctx.postMessage({message:count});

您的代码示例

tstut.js

if(typeof(Worker) !== 'undefined'){
    const worker = new Worker('worker.js');
    worker.postMessage('do some work');
    worker.addEventListener('message', function (e) {
        //console.log(e);
        console.log(e.data);
    });
}

worker.js(这里不需要检查worker支持)

const ctx: Worker = self as any;
ctx.addEventListener('message', (e) => {
    // console.log(e)
    if (e.data === 'do some work') {
        console.log('Worker is about to start some work');
        let count: number = 0;
        for (let i: number = 0; i < 1000; i++) {
            count += i;
        }
        ctx.postMessage({ message: count });
    }
})

关于javascript - 错误 TS2554 : Expected 2-3 arguments, 但得到 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50402004/

相关文章:

javascript - 如何使用 JavaScript 找到背景图像的 y 位置(以像素为单位)?

typescript - 检查属性是否存在的类型保护

typescript - 类型定义中右大括号后面的 [keyof T] 是什么意思?

javascript - -= 和网络 worker 的错误

javascript - Axios Promise 处理 - 在 react-native 中获取 "Possible Unhandled Promise Rejection - TypeError: Network request failed"

javascript - 添加 header 来获取,解决cors,运行cryptojs客户端

javascript - 当我们从一个弹出窗口移动到另一个弹出窗口时,滚动条位置不会保留

typescript - 返回列表大小的通用函数中的 no-explicit-any

javascript - 如何在webworker中连续发送xmlhttprequest?

javascript - 如何知道网络 worker 是否仍在运行?