Javascript SharedWorkers演示到Typescript演示问题

时间:2016-12-02 18:16:37

标签: 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:属性'SharedWorker'在类型'{new(stringUrl:string,name?:string | undefined)上不存在:SharedWorker;原型SharedWorker; }“

这是d.ts文件的问题,是否声明了太多的SharedWorker(名称空间,接口和& var)?

导入是否应该不同。我以前导入的导入用于我导入的实际模块,但共享工作程序不是您使用npm安装的外部模块。

1 个答案:

答案 0 :(得分:1)

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

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