2014-01-08 34 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 
}