watzon
watzon

Reputation: 2549

Handling typescript typings with eval

I am trying to write a definition file for the webworker-threads npm library. In their documentation it says that you can create a new worker as follows:

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

The trick is that everything inside of that function that is used to construct the worker has access to the worker itself through a self variable. This is accomplished in their code by checking if the argument passed into new Worker() is a function, and if so calling eval on it. See here.

I'm wondering how to duplicate this with my typings. So far I have this, but it doesn't work:

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;
}

Upvotes: 2

Views: 1274

Answers (1)

Roman Kolesnikov
Roman Kolesnikov

Reputation: 12147

In TypeScript 2.0 that in Release Candidate TS changelog now you can write:

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

In older TypeScript versions I can recommend to cast this to Worker inside callback.

Upvotes: 4

Related Questions