【问题标题】:Creating class instance in the function of other class in typescript在打字稿中其他类的函数中创建类实例
【发布时间】:2013-10-22 18:44:17
【问题描述】:

我想调试我的项目,但我发现创建类实例的小问题。我试着用简单的例子来描述它。

//this is saved in file Engine.ts
module Car {
    export class Engine {
        name: string;

        constructor(name: string) {
            this.name = name;
         }

         getName(): string{
            return this.name;
        }
    }
}

这个类用他的名字描述简单的引擎。现在我想在某些车辆中创建引擎:

///<reference path="Engine.ts"/>
//this is saved in file app.ts
module Car {
    export class Vehicle {
        name: string;
        constructor(name: string) {
            this.name = name;
        }
        buildCar() : string {
            var engine = new Engine("Volkswagen 1.9TDI");
            return "Name of the vehicle is " + this.name + " and has engine " + engine.getName();
        }
    }
}

window.onload = () => {
    var car = new Car.Vehicle("Skoda Rapid");
    alert(car.buildCar);
}

问题在于创建类引擎的实例。浏览器控制台返回 Car.Engine 不是构造函数的错误。我该如何解决这个问题?我有更困难的项目,这仅描述了问题的主要原理。在我的项目中,我必须在其他类的函数中创建某个类的实例。

【问题讨论】:

  • 该行已经在Car模块内部,不需要限定

标签: function class instance typescript


【解决方案1】:

听起来您已经编译为engine.js 和app.js,但实际上并没有像app.js 那样通过script 标签加载engine.js。

【讨论】:

  • 我认为这不是正确的解决方案...我们无法在 HTMl 文件中加载许多文件...我正在使用 Systemjs 加载文件...。错误它在 ES5 中对我来说工作得很好,但在 ES6 中却不行......
【解决方案2】:

除了有时与在运行时不包括脚本 as Ryan answered (对于这个特定问题的情况)有关之外,这也可能是由文件中的类的顺序引起的。

如果这是您遇到的问题,请将错误中提到的类移动到使用前的位置将解决问题。

【讨论】:

    【解决方案3】:

    使用 --out 编译器标志编译 app.ts。这将在生成的文件中包含 engine.ts 的代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-06
      • 2017-07-02
      • 1970-01-01
      • 2012-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-24
      相关资源
      最近更新 更多