我是新手稿。
我今天编写了下面的代码,并且在编辑器中出现了编译错误。
类型'EngineFactory'不能分配给类型 'EngineInterface'。 “EngineFactory”类型中缺少属性“run”。
我理解此错误消息的含义但我不知道如何解决此错误。请教我修正此错误的适当方法。
interface EngineInterface {
run();
}
class HondaEngine implements EngineInterface{
constructor() {}
run() {}
}
class ToyotaEngine implements EngineInterface{
constructor() {}
run() {}
}
enum EngineType {
Honda,
Toyota
}
class EngineFactory {
constructor(engineType: EngineType){
if (engineType === EngineType.Honda) {
return new HondaEngine();
}
if (engineType === EngineType.Toyota) {
return new ToyotaEngine();
}
}
}
class Car {
private engine: EngineInterface;
constructor(engineType: EngineType) {
this.engine = new EngineFactory(engineType);
}
}
let car = new Car(EngineType.Toyota);
注意
以这种方式编写代码导致无编译错误。 但我想知道是否有另一种方法可以解决我上面粘贴的错误。
class EngineFactory {
constructor(){}
static getEngine(engineType: EngineType): EngineInterface {
if (engineType === EngineType.Honda) {
return new HondaEngine();
}
if (engineType === EngineType.Toyota) {
return new ToyotaEngine();
}
}
}
class Car {
private engine: EngineInterface;
constructor(engineType: EngineType) {
this.engine = EngineFactory.getEngine(engineType);
}
}
let car = new Car(EngineType.Toyota);
我希望我可以在构造函数方法中定义返回的类型......
class EngineFactory {
// Typescript won't let me define returned type in constructor.
constructor(engineType: EngineType): EngineInterface{
if (engineType === EngineType.Honda) {
return new HondaEngine();
}
if (engineType === EngineType.Toyota) {
return new ToyotaEngine();
}
}
}
答案 0 :(得分:1)
如果以这种方式编写代码会更清楚:
类EngineFactory { 构造(){}
static getEngine(engineType: EngineType): EngineInterface {
switch(EngineType):
//case ....
}
}