2012-10-03 62 views

回答

6

簡短回答: Typescript不支持將類定義拆分爲多個文件。

解決方法:您可以定義包含類成員的接口以及實現該接口的兩個不同類。然後混合一個類到另一個類的屬性,組成一個組合類。例如:

LargeClass.a.ts

interface LargeClass { 
    methodA(): string; 
    methodB(): string; 
} 

class LargeA implements LargeClass { 
    methodA:() => string; // not implemented, needed since otherwise we don't extend LargeClass 
    methodB() { 
    return "Hello world"; 
    } 
} 

LargeClass.b.ts

class LargeB implements LargeClass { 
    methodA() { 
    return "Foo"; 
    } 
    methodB:() => string; // not implemented, needed since otherwise we don't extend LargeClass 
} 

Usage.ts

// Using underscore's extend to copy implementation from A to B 
var c:LargeClass = _.extend(new LargeA(), new LargeB()); 

// Manually mixing in a to b 
var a = new LargeA(); 
var b:LargeClass = new LargeB(); 
for (var prop in a) { 
    b[prop]=a[prop]; 
} 

這但是,如果你需要這個類的構造函數,它將不起作用。實際上它是次優的......解決方法沒有那麼多:)

哦,順便說一下,這是可行的,因爲typescript不會爲類發出單元化的屬性/字段類型聲明 - 它僅將它們用於類型檢查。

我也知道你可以做到這一點沒有接口,只是在一個漂亮的方式類構造......我會離開該怎麼做,作爲一個練習,讀者現在...

+0

好了,假設myclass.ts包含MyClass的聲明。現在我創建第二個文件,並在頂部放置以下內容: /// 如何繼續?什麼是定義MyClass方法的語法?例如,在C++中,我會在方法的定義之前添加MyClass ::。 – vexator

+0

我可能會誤解你 - 但如果你認爲你需要一個用於定義類的頭文件(就像在C++中一樣),你不需要。要在secondfile.ts中使用來自myclass.ts的定義(類,接口等),它應該與頂部的typescript引用標籤一起工作。然而,類型將在全局命名空間中聲明,因此可能會發生衝突,因此您應該注意這一點。在這種情況下,Typescript提供模塊系統並與CommonJS或AMD模塊加載器集成。 –

+0

是的,我認爲我們不是在談論同樣的事情:我有一個類代表一個圖形設備,有幾十種方法,通過設計,不能分成幾個類。我希望能夠在一個文件中的成員變量,而在另一個文件中的一些方法定義沿定義類:) 類GraphicsEngine({...} 文件2: 文件1 GraphicsEngine .renderStuff(){...} GraphicsEngine.renderSomeOtherStuff(){...}等 – vexator

相關問題