【问题标题】:Handling typescript typings with eval使用 eval 处理打字稿类型
【发布时间】:2017-01-19 05:59:58
【问题描述】:

我正在尝试为webworker-threads npm 库编写定义文件。在他们的文档中,它说您可以按如下方式创建一个新工作人员:

let worker = new Worker(function() {
  this.postMessage('worker created');
  this.close();
});

诀窍在于,该函数内部用于构造 worker 的所有内容都可以通过 self 变量访问 worker 本身。这在他们的代码中通过检查传递给new Worker() 的参数是否是一个函数来完成,如果是,则在其上调用 eval。见here

我想知道如何用我的打字来复制它。到目前为止,我有这个,但它不起作用:

export class Worker {
    public onmessage: (event: any) => any;

    public thread: Thread;

    constructor(fn?: Worker | string); // <= Doesn't work because technically the function passed in isn't a worker, it just accesses the new Worker as if it were.

    public postMessage(data: any): void;

    public terminate(): void;

    public addEventListener(type: string, cb: (event: any) => any): void;

    public removeEventListener(type: string): void;
}

【问题讨论】:

  • 你想做什么?您想模仿他们正在做什么或试图使用它吗?既然他们已经为您提供了 Worker 类,为什么您需要创建自己的类?
  • 您知道他们并没有真正使用eval 对吗?这是他们自己在 C 代码中实现的 eval
  • @NitzanTomer 它仍然完成了类似的事情。不管我正在寻找的答案是由 Rem 给出的

标签: node.js typescript typescript-typings


【解决方案1】:

在 TypeScript 2.0 中,在 Release Candidate TS changelog 现在你可以写:

constructor(fn?: (this: Worker) => any);

在较旧的 TypeScript 版本中,我可以建议在回调中将其强制转换为 Worker。

【讨论】:

  • 太棒了,这正是我想要的!
  • 花了我一段时间才找到相关的section
猜你喜欢
  • 1970-01-01
  • 2018-10-26
  • 2021-05-26
  • 2021-11-26
  • 2021-12-30
  • 2018-01-31
  • 2012-11-06
  • 1970-01-01
  • 2020-04-01
相关资源
最近更新 更多