ошибка TS2554: ожидается 2-3 аргумента, но получено 1 - PullRequest
0 голосов
/ 18 мая 2018

С заданными 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')

Как устранить приведенную ниже ошибку при наборе текста?

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

2)

Для приведенного ниже рабочего кода (./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

Учитывая сценарий не подходит в моем случае.

Как решитьниже ошибка для postMessage()?На ходу tsc

Expecting 2-3 arguments, but got 1

1 Ответ

0 голосов
/ 19 мая 2018

Рабочие не живут на объекте окна.

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

Чтобы обойти ошибку postMessage вашего веб-работника, либо используйте библиотеку 'webworkers' в tsconfig, либо:

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('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 });
    }
})
...