2014-01-09 47 views
1

我最近在打字稿中發現了typeof關鍵字,它幾乎可以節省一天的時間。我想描述一個道場的contentPane作爲接口:接口上的Typescript typeof?

declare module dijit { 

    module layout { 

     interface ContentPane extends dijit._Widget, dijit._Container { 
     } 
    } 
} 

declare module "dijit/layout/ContentPane" 
{ 
    var ContentPane: typeof dijit.layout.ContentPane; 
    export = ContentPane; 
} 

但不幸的是,我不能做一個接口上的typeof。我必須改爲將ContentPane描述爲一個類,但由於typescript沒有實現多重繼承(通過擴展),我必須這樣做嗎?

declare module dijit { 

    module layout 
    { 

     class ContentPane extends dijit._Widget 
     implements dijit._Container 
     { 
      // how to avoid duplicating the _Container here? 
      addChild(widget: _WidgetBase, insertIndex?: number): void; 
      getIndexOfChild(child: _WidgetBase): number; 
      hasChildren(): boolean; 
      removeChild(widget: _WidgetBase): void; 
      removeChild(widget: number): void; 
     } 
    } 
} 

declare module "dijit/layout/ContentPane" 
{ 
    var ContentPane: typeof dijit.layout.ContentPane; 
    export = ContentPane; 
} 

是否有替代方案不需要我複製dijit._Container的簽名?有沒有解釋爲什麼typeof SomeInterface不起作用?

+0

'typeof'爲您提供*值*的*值*。你期望'typeof'接口是什麼意思?它已經是一種類型。 –

+0

我在一個d.ts文件中工作,其中的一切都只是對實際實現的描述。所以我想在一個d.ts文件中我可以做三件事之一:(1)使用多重繼承或(2)IMyClass類型描述所述接口的構造函數或(3)不需要重新聲明如果我告訴編譯器這個類實現它,那麼接口的簽名。我想我的偏好是3,然後2然後1.但實際上,我只是尋找一種方法來避免冗餘。 –

回答

0

目前尚不可能做到這一點(0.9.5)。見workitem

0

打字稿中的界面可以有呼叫簽名。例如下面將編譯:

interface Foo{ 
    new (arg:string):number; 
} 

var SomeClass:Foo; 

var someInstance = new SomeClass("somestring"); 

所以,你不應該需要typeof與接口和應該簡單地做:

declare module dijit { 

    module layout { 

     interface ContentPane extends dijit._Widget, dijit._Container { 
     } 
    } 
} 

declare module "dijit/layout/ContentPane" 
{ 
    var ContentPane: dijit.layout.ContentPane; 
    export = ContentPane; 
} 
+0

我得到「無效」的新「表達式」錯誤。 –

+0

@CoreyAlix代碼示例爲您引用的最小破壞代碼將是很好的。 PS我共享的'interface Foo'代碼示例在0.9.5的TS操作系統上工作 – basarat

+0

將您的解決方案放在d.ts文件中,然後放在.ts文件中執行以下操作: import ContentPane = require(「dijit/layout/ContentPane 「); var cp = new ContentPane(); –