使用给定的tsconfig.json
,
{
"compilerOptions": {
"lib": ["es2015", "dom"]
},
"files": [
"./project1/tstut.ts",
"./project1/worker.ts"
]
}
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/