Javascript SharedWorkers 演示到 Typescript 演示问题

标签 javascript typescript typescript2.0

我使用普通 JS 创建了一个共享工作人员的简单演示,我决定看看是否可以将其更改为 TS 项目,从一开始我就遇到了一个问题,我不确定这是否与d.ts 文件或其他文件。

我已经安装了 @types/sharedworkers 定义(npm install --save @types/sharedworker)。 我正在使用 Typescript 2.1.1。

如果我创建一个简单的类,例如

class MyTestClass {
    private worker : SharedWorker;
    constructor() {
        this.worker = new SharedWorker( 'JS_code_to_load');
    }
}

然后我的 IDE (IntelliJ) 会自动完成导入并使其 - 导入 SharedWorker = SharedWorker.SharedWorker;

通过查看 SharedWorker 文件,这似乎是有意义的 - Github sharedworker d.ts

但是发生了一个错误 - TS2339: 类型 '{ new (stringUrl: string, name?: string | undefined): SharedWorker; 上不存在属性 'SharedWorker' SharedWorker 原型(prototype); }'

这是 d.ts 文件的问题吗,声明了太多 SharedWorker(命名空间、接口(interface)和 var)?

导入是否应该不同。我之前使用的导入是针对我导入的实际模块,但共享工作线程不是使用 npm 安装的外部模块。

最佳答案

根据该类型定义,您的代码应该是:

class MyTestClass {
    private worker : SharedWorker.SharedWorker;
    constructor() {
        this.worker = new SharedWorker( 'JS_code_to_load');
    }
}

完成:

declare namespace SharedWorker {
    interface AbstractWorker extends EventTarget {
        onerror: (ev: ErrorEvent) => any;
    }

    export interface SharedWorker extends AbstractWorker {
        /**
         * the value it was assigned by the object's constructor.
         * It represents the MessagePort for communicating with the shared worker.
         * @type {MessagePort}
         */
        port: MessagePort;
    }
}

declare var SharedWorker: {
    prototype: SharedWorker.SharedWorker;
    /***
     *
     * @param {string} stringUrl    Pathname to JavaScript file
     * @param {string} name         Name of the worker to execute
     */
    new (stringUrl: string, name?: string): SharedWorker.SharedWorker;
};

class MyTestClass {
    private worker : SharedWorker.SharedWorker;
    constructor() {
        this.worker = new SharedWorker( 'JS_code_to_load');
    }
}

关于Javascript SharedWorkers 演示到 Typescript 演示问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40938603/

相关文章:

javascript - 如何从openlayers获取矢量图层线点的坐标?

javascript - Jquery .Get() 在 Internet Explorer 中提取 NULL

typescript - 明确类型的更改需要多长时间才能出现在 npm @types 中?

javascript - Webpack-Dev-Server + Laravel,从网络设备访问不会通过内存中的js注入(inject)css

javascript - 按数字更改字母 + onkeypress + JavaScript

javascript - 是否有与 TypeScript 中的 Spread Operator 等效的用于接口(interface)的功能?

typescript - 如何让一个类在 Typescript 中实现调用签名?

javascript - 如何在订阅中返回 Observable?

javascript - 在 TypeScript 中使用 async/await 进行方法链接

javascript - 如何使用接口(interface)在 typescript 中添加两个数字