Reputation: 1
With given tsconfig.json
,
{
"compilerOptions": {
"lib": ["es2015", "dom"]
},
"files": [
"./project1/tstut.ts",
"./project1/worker.ts"
]
}
and folder structure
1)
For below code(./project1/tstut.ts
),
if(window.Worker){
console.log('Workers are available');
}
....
let worker: Worker = new Worker('worker.js');
worker.postMessage('do some work')
How to resolve below typescript error?
Property 'Worker' does not exist on type 'Window'
2)
For below worker code(./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 allows syntax self.postMessage({message: count})
https://github.com/Microsoft/TypeScript/issues/582
Given scenario does not fit in my case.
How to resolve below error for postMessage()
? On running tsc
Expecting 2-3 arguments, but got 1
Upvotes: 3
Views: 16821
Reputation: 8046
Workers don't live on the window object.
if (typeof(Worker) !== "undefined") {
// Yes! Web worker support!
// Some code.....
} else {
// Sorry! No Web Worker support..
}
To get around your webworker postMessage error, either use 'webworker' lib in tsconfig or the following
const ctx: Worker = self as any;
...
ctx.postMessage({message:count});
Your code example
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 (No need to check for worker support here)
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 });
}
})
Upvotes: 14