我用普通的js创建了一个简单的shared workers演示,我决定看看是否可以将它改为ts项目,从一开始我就遇到了一个问题,我不确定这是否与d.ts文件或其他东西有关。
我已经安装了@types/sharedworkers定义(npm install--save@types/sharedworker)。
我用的是TypeScript2.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
但是发生的是一个错误——TS23 39:属性“SeaDeWorks'不存在于{新”(String URL:String,名称)上。:string未定义):sharedworker;原型sharedworker;}'
这是不是一个问题,有太多的文件被声明(命名空间,接口,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 - Javascript SharedWorkers演示到Typescript演示问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40938603/

10-10 03:17