2016-09-25 59 views
0

我正在用typescript創建數據模型範例。我在不同的地方存儲不同類型的數據(SQL,本地緩存)。我想創建一個抽象類,它包含我需要用於任何類型的數據存儲(創建,查找,更新,計數,銷燬)的所有方法。通過這種方式,我可以擴展該類並針對不同類型的存儲實現它,並且編譯器會在我缺少方法時提醒我。然後,我會在描述數據模型的類中擴展其中的一個實現。但是,我需要的一些方法(如查找和創建)是靜態的。我知道打字稿不支持抽象的靜態方法。有沒有類似於我可以使用的抽象方法,所以編譯器提醒我缺少方法?TypeScript中靜態方法的抽象方法的版本

我也想這些靜態方法是通用的,類型與類相同。我知道這對標準的泛型類沒有意義。但是,由於這個類總是被擴展並且從未被實例化,我可以在擴展時鍵入泛型類,自動更新靜態方法的泛型類型嗎?

回答

2

是否有類似的抽象方法,我可以使用,因此編譯器警告我失蹤方法

不建的東西,這樣你就不會簡單地

// WILL NOT COMPILE. SAMPLE 
class Foo { 
    abstract static X() { } 
} 

class Bar extends Foo { // Error here please 
} 

得到很好的錯誤然而,您可以使用類型兼容性等技巧來確保:

interface FooAbstract { 
    X(): any; 
} 
let _ensureAbstractMatch: FooAbstract; 
class Foo { 
} 

class Bar extends Foo { 
} 
_ensureAbstractMatch = Bar; // Error missing method 

樣品實施:

interface FooAbstract { 
    X(): any; 
} 
let _ensureAbstractMatch: FooAbstract; 
class Foo { 
} 

class Bar extends Foo { 
    static X() { } 
} 
_ensureAbstractMatch = Bar; // OKAY 
+0

我想這可能是簡單的使用Singleton模式,以代替靜態方法創建一個有方法的通用單對象,然後鍵入通用對象與具有必要方法的接口或抽象類爲每個對象。你認爲這是一個好方法嗎? – user5505266

+0

'你認爲這是一個好方法嗎?如果它有效,那麼是 – basarat