Node.js Typescript中工作线程上的编译错误

Node.js Typescript中工作线程上的编译错误,node.js,worker,Node.js,Worker,此代码来自 我已经修改了它以用Typescript编写,但在上有一个编译错误: 测试编号。ts:50:18-错误TS2304:找不到名称 “workerData”。50个生成时间(workerData.start, workerData.range) 有什么问题 'use strict'; import {Worker, isMainThread, parentPort} from 'worker_threads'; const min = 2; let primes:number[] = [

此代码来自
我已经修改了它以用Typescript编写,但在上有一个编译错误:

测试编号。ts:50:18-错误TS2304:找不到名称 “workerData”。
50个生成时间(workerData.start, workerData.range)



有什么问题

'use strict';
import {Worker, isMainThread, parentPort} from 'worker_threads';
const min = 2;
let primes:number[] = [];

function generatePrimes(start: number, range: number) {
  let isPrime = true;
  let end = start + range;
  for (let i = start; i < end; i++) {
    for (let j = min; j < Math.sqrt(end); j++) {
      if (i !== j && i%j === 0) {
        isPrime = false;
        break;
      }
    }
    if (isPrime) {
      primes.push(i);
    }
    isPrime = true;
  }
}

if (isMainThread) {
  const max = 1e7;
  const threadCount = +process.argv[2] || 2;
  const threads = new Set<Worker>();;
  console.log(`Running with ${threadCount} threads...`);
  const range = Math.ceil((max - min) / threadCount);
  let start = min;
  for (let i = 0; i < threadCount - 1; i++) {
    const myStart = start;
    threads.add(new Worker(__filename, { workerData: { start: myStart, range }}));
    start += range;
  }
  threads.add(new Worker(__filename, { workerData: { start, range: range + ((max - min + 1) % threadCount)}}));
  for (let worker of Array.from(threads)) {
    worker.on('error', (err) => { throw err; });
    worker.on('exit', () => {
      threads.delete(worker);
      console.log(`Thread exiting, ${threads.size} running...`);
      if (threads.size === 0) {
        console.log(primes.join('\n'));
      }
    })
    worker.on('message', (msg) => {
      primes = primes.concat(msg);
    });
  }
} else {
  generatePrimes(workerData.start, workerData.range);
  parentPort.postMessage(primes);
}
“严格使用”;
从“Worker_threads”导入{Worker,isMainThread,parentPort};
常数min=2;
设素数:数[]=[];
函数生成时间(开始:编号,范围:编号){
让isPrime=true;
让结束=开始+范围;
for(让i=start;i{throw err;});
worker.on('exit',()=>{
线程。删除(工作线程);
log(`threadexing,${threads.size}running…`);
如果(threads.size==0){
console.log(primes.join('\n'));
}
})
worker.on('message',(msg)=>{
primes=primes.concat(味精);
});
}
}否则{
生成时间(workerData.start、workerData.range);
parentPort.postMessage(primes);
}

worker.workerData
是一个任意JavaScript值,其中包含传递到此线程的worker构造函数的数据克隆,因此需要导入它。更多信息

worker.workerData是一个任意JavaScript值,其中包含传递到此线程的worker构造函数的数据克隆,因此需要导入它。更多信息

您必须导入workerData@C.Gochev:谢谢!但是为什么我必须在使用对象(接口)WorkerOptions的成员时导入常量workerData呢?我指的是工人。我对此有点困惑。@Yellow75任何未明确导入的内容都不会被导入(不存在)@slebetman:是的,但我不明白为什么我必须导入常量workerData;我正在使用一个对象的属性,即实现接口WorkerOptions的对象工作者的workerData。不,您不是。您正试图访问您发布的代码底部变量
workerData
的属性
start
generateTime(workerData.start,workerData.range)。它抱怨找不到名为
workerData
的变量,因为它没有在任何需要导入的地方声明或导入workerData@C.Gochev:谢谢!但是为什么我必须在使用对象(接口)WorkerOptions的成员时导入常量workerData呢?我指的是工人。我对此有点困惑。@Yellow75任何未明确导入的内容都不会被导入(不存在)@slebetman:是的,但我不明白为什么我必须导入常量workerData;我正在使用一个对象的属性,即实现接口WorkerOptions的对象工作者的workerData。不,您不是。您正试图访问您发布的代码底部变量
workerData
的属性
start
generateTime(workerData.start,workerData.range)。它抱怨找不到名为
workerData
的变量,因为它没有在任何地方声明或导入