2014-01-08 63 views
7

這用於打字稿0.9.1.1編譯(方法實現略):TypeScript 0.9.5:如何用靜態成員和實現它的類來定義接口?

module MyNodule { 
    export interface ILocalStorage { 
    SupportsLocalStorage(): boolean; 
    SaveData(id: string, obj: any): boolean; 
    LoadData(id: string): any; 
    } 

    export class LocalStorage implements ILocalStorage { 
    static SupportsLocalStorage(): boolean { 
     return true; 
    } 

    static SaveData(id: string, obj: any): boolean { 
     return true; 
    } 

    static LoadData(id: string): any { 
     return {}; 
    } 
    } 

}

在打字稿0.9.5我收到編譯器錯誤「類的localStorage聲明接口ILocalStorage但沒有實現它」 。

我需要改變什麼,以便它再次編譯?

注: 用在這方面的接口的原因是: - 有什麼類實現 文檔 - 可以讓編譯器檢查接口是否正確實施。

+0

的可能的複製[如何界定打字稿接口的靜態屬性(https://stackoverflow.com/questions/13955157/how-to-define-static-屬性合打字稿接口) – Val

回答

16

接口定義了該類的實例實例,而不是類所具有的。所以總之你不能用靜態成員來實現它。

由於typeScript在結構上是類型化的,因​​此可以將類指定給接口。在這種情況下,類實際上是一個實例:

module MyNodule { 
    export interface ILocalStorage { 
    SupportsLocalStorage(): boolean; 
    SaveData(id: string, obj: any): boolean; 
    LoadData(id: string): any; 
    } 

    export class LocalStorage { 
    static SupportsLocalStorage(): boolean { 
     return true; 
    } 

    static SaveData(id: string, obj: any): boolean { 
     return true; 
    } 

    static LoadData(id: string): any { 
     return {}; 
    } 
    } 

    var foo : ILocalStorage = LocalStorage; // Will compile fine 
}