Câu hỏi TypeScript 0.9.5: làm thế nào để định nghĩa một giao diện với các thành viên tĩnh và một lớp thực hiện nó?


Điều này được sử dụng để biên dịch trong TypeScript 0.9.1.1 (phương thức triển khai phương thức bị bỏ qua):

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 {};
    }
  }

}

Trong TypeScript 0.9.5 tôi nhận được lỗi trình biên dịch "Class LocalStorage khai báo giao diện ILocalStorage nhưng không thực hiện nó".

Tôi cần phải thay đổi gì để nó biên dịch lại?

Chú thích: Lý do để sử dụng giao diện trong ngữ cảnh này là: - có tài liệu về những gì thực hiện lớp học - Kiểm tra trình biên dịch nếu giao diện được triển khai đúng.


7
2018-01-08 10:09


gốc


Có thể trùng lặp Cách xác định thuộc tính tĩnh trong giao diện TypeScript - Val


Các câu trả lời:


Giao diện xác định cái gì các phiên bản của lớp học sẽ có, không phải những gì lớp học có. Vì vậy, trong ngắn hạn, bạn không thể thực hiện nó với các thành viên tĩnh.

Vì typeScript được cấu trúc kiểu bạn có thể gán lớp cho giao diện. Trong trường hợp này, lớp là một cá thể có hiệu quả:

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 
}

16
2018-01-08 11:40