Javascript 错误TS2554:应为2-3个参数,但得到1个

Javascript 错误TS2554:应为2-3个参数,但得到1个,javascript,typescript,web-worker,Javascript,Typescript,Web Worker,使用给定的tsconfig.json { "compilerOptions": { "lib": ["es2015", "dom"] }, "files": [ "./project1/tstut.ts", "./project1/worker.ts" ] } 及 (一) 对于以下代码(/project1/tstut.ts) 如何解决以下类型脚本错误 Property 'Worker' does not exist

使用给定的
tsconfig.json

{

    "compilerOptions": {

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

    ]
  }


(一)

对于以下代码(
/project1/tstut.ts

如何解决以下类型脚本错误

Property 'Worker' does not exist on type 'Window'
(二)

对于以下工作代码(
/project1/worker.ts

self.addEventListener('message',(e)=>{
//控制台日志(e)
如果(例如,数据===‘做一些工作’){
log('工人即将开始一些工作');
让计数:数字=0;

对于(设i:number=0;i工人不住在窗口对象上)

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(此处无需检查工人支持)

const ctx:Worker=self as any;
ctx.addEventListener('消息',(e)=>{
//控制台日志(e)
如果(例如,数据===‘做一些工作’){
log('工人即将开始一些工作');
让计数:数字=0;
for(设i:number=0;i<1000;i++){
计数+=i;
}
postMessage({message:count});
}
})

使用
if('Worker'在窗口中)
instead@artem例如,
window.alert
不需要语法
窗口中的alert
。为什么
窗口中的Worker
需要语法
Worker
?但是,例如,声明为独立(全局)typescript DOM类型中的对象,不需要语法
window.Worker
@artem窗口中的
Worker
window.Worker
有什么不同?这两种语法不是都意味着
window
对象中的属性吗?是的,它是javascript语法,在编译时不检查它,只有在运行时代码流进入
否则
阻塞并说
不支持webworker
。我需要在
tsconfig.json
中做一些更改吗?
tsconfig.json
在查询中,因为您在Worker内部执行Worker检查。不需要这样做。在JS中,我们有
SharedWorker
对象。我正在尝试使用
let Worker:s执行相同的代码haredWorker=new SharedWorker('worker.js');
但我看到错误
找不到名称'SharedWorker'
我可以使用:
让worker:SharedWorker.SharedWorker=new SharedWorker('worker.js');
安装类型定义后,但是
worker.postMessage('do some work'))
不起作用我认为它在.tsconfig文件中被称为“webworker”而不是“webworkers”库,根据。
const ctx: Worker = self as any;
...
ctx.postMessage({message:count});
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);
    });
}
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 });
    }
})