打字稿模块和类同步?(TypeScript module and class simultaneou

2019-09-23 18:43发布

目前我正在试图建立一个的OpenLayers打字稿定义文件。

问题是,在的OpenLayers有将转化为双方的模块和打字稿一类特定的类。

例如,有在Protocol模块类OpenLayers和还有一类Response在模块OpenLayers.Protocol

我怎么能模式,在打字稿? 我可以Protocol一类,并定义Response类作为导出一个内部类? 你会如何去解决这个问题?

Answer 1:

声明Response作为static的字段Protocol使用构造类型,返回一个interface定义Response类:

declare module OpenLayers {
    export interface IProtocolResponse {
        foo(): void;
    }

    export class Protocol {
        static Response: new () => IProtocolResponse;
    }
}

var response = new OpenLayers.Protocol.Response();
response.foo();

编辑:

或者像安德斯在指出这个讨论组的问题 ,你可以有这样的内部类多个构造函数:

declare module OpenLayers {
    export interface IProtocolResponse {
        foo(): void;
    }

    export class Protocol {
        static Response: {
            new (): IProtocolResponse;
            new (string): IProtocolResponse;
        };
    }
}

var response = new OpenLayers.Protocol.Response('bar');
response.foo();

这两种方法的主要缺点是,你不能从派生类OpenLayers.Protocol.Response



Answer 2:

这里是我的答案更新,我希望帮助 - 它应该让你开始定义的OpenType:

declare module OpenType {
   export class Protocol {
       constructor();
       Request;
   }
}

var x = new OpenType.Protocol();
var y = new  x.Request();
var z = x.Request;


文章来源: TypeScript module and class simultaneously?