2016-12-02 100 views
1

我用普通的JS创建了一个共享工作人员的简单演示,我决定看看我是否可以将其改为TS项目,从一开始我就遇到了问题,而我不知道这是否与d.ts文件或别的东西有关。Javascript SharedWorkers演示到Typescript演示问题

我已经安装了@ 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”不上类型存在“{新(stringUrl:字符串,叫什么名字? :string | undefined):SharedWorker;原型SharedWorker; }'

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

应该导入不同。我以前使用的导入已经用于我导入的实际模块,但共享工作人员不是使用npm安装的外部模块。基于此类型定义

+0

现在,你解决了这个问题,请你链接到演示结果? – Seanny123

回答

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