【问题标题】:Interfaces and Getters\Setters接口和 Getter\Setter
【发布时间】:2016-04-18 18:38:52
【问题描述】:

我有以下:

interface IEngine {
    type():string;
    type(type:string):void;
}

class Engine implements IEngine {
    private _type: string;

    get type():string {
        return this._type;
    }

    set type(type:string) {
        this._type = type;
    }


}

var engine = new Engine();
engine.type = 'foo';

在我看来接口已经实现,但是,运行 tsc 会引发异常:

F:\>tsc interfaces.ts --target "es5"
interfaces.ts(11,7): error TS2420: Class 'Engine' incorrectly implements interface 'IEngine'.
  Types of property 'type' are incompatible.
    Type 'string' is not assignable to type '{ (): string; (type: string): void; }'.

【问题讨论】:

    标签: javascript typescript


    【解决方案1】:

    你正在实现属性,所以在接口中应该是这样的:

    interface IEngine {
        type:string;
    }
    

    【讨论】:

      【解决方案2】:

      Typescript 中的接口非常适合定义所需对象的“形状”。在您的示例中,您正在寻找一个具有名为type 的属性的对象。这可以通过指定来完成:

      interface IEngine {
          type: string;
      }
      

      getter 和 setter 是 实现细节,然后在实现接口的对象中定义,例如您问题中的 Engine 类型。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-17
        • 2016-02-24
        相关资源
        最近更新 更多