我有以下内容:
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; }'.
答案 0 :(得分:5)
您正在实现属性,因此在界面中它应该是这样的:
interface IEngine {
type:string;
}
答案 1 :(得分:3)
Typescript中的接口非常适合定义所需对象的“形状”。在您的示例中,您正在查找具有名为.js
的属性的对象。这可以通过指定:
tests/foo/bar/worker.js
getter和setter是实现细节,然后在实现界面的对象中定义,例如问题中的type
类型。