Interfaces and GettersSetters

Interfaces and GettersSetters

本文关键字:GettersSetters and Interfaces      更新时间:2023-09-26

我有以下内容:

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; }'.

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

interface IEngine {
    type:string;
}

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

interface IEngine {
    type: string;
}

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