2012-10-09 62 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派生類。