2012-10-09 63 views
4

我目前正在尝试为OpenLayers构建TypeScript定义文件。TypeScript模块和类同时?

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

例如,模块OpenLayers中有Protocol类,模块OpenLayers.Protocol中有Response类。

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

+0

的可能的复制[任何方式来声明在打字原稿巢类结构?](http://stackoverflow.com/questions/13495107/any-way-to-declare-a-nest-class-structure-in-打字稿) – Alex

回答

0

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

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

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

这两种解决方案都不可悲。第一个,因为它不是我想要的,因为Protocol.Response应该让这个类不是它的一个实例。第二个是可悲的也是不可能的,因为我不能只在重命名的OpenLayers类:(。 – chrischu

+0

我已经添加了第三次尝试,看看如果这是你所追求的。 – Fenton

+0

确定的事情是,我建立打字稿(类型不支持JavaScript微软)定义文件他们是不是一个真正的实现,而是一种接口声明的黯然因此也第三种解决方案不起作用 – chrischu

1

声明ResponseProtocol使用构造类型static场,返回一个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(); 

编辑:

或者像安德斯在this discussion list question指出,你可以有这样的内部类多个构造函数:

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派生类。