2016-03-27 19 views
0

Typescriptを初めて使用しました。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); 

NOTE

。 しかし、上記に貼り付けたエラーを修正する別の方法があるのだろうかと思います。私は、コンストラクタメソッドで返されるタイプを定義することがしたい

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

    } 

} 

答えて

2
  1. それは、コンストラクタ関数内でオブジェクトを返すように無意味です。 { コンストラクタ(){}

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

    }

クラスEngineFactory:あなたはコードをこのように書いた場合

  • それはより明確になります