Typescript中的complile错误

时间:2016-03-27 03:54:34

标签: javascript typescript

我是新手稿。

我今天编写了下面的代码,并且在编辑器中出现了编译错误。

  

类型'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();
        }

    }

}

1 个答案:

答案 0 :(得分:1)

  1. 在构造函数中返回一个对象毫无意义。
  2. 如果以这种方式编写代码会更清楚:

    类EngineFactory {     构造(){}

    static getEngine(engineType: EngineType): EngineInterface {
         switch(EngineType):
               //case  ....
    }
    

    }