Module TypeScript内部模块用法

Module TypeScript内部模块用法,module,typescript,Module,Typescript,我在BMW.ts中定义了一个名为BMW的类,如下所示: ///<reference path="../Thing.ts"/> module Entities.Cars { import e = Entities; export class BMW extends Vehicle { public series: string; constructor ( model : string, series : string) {

我在BMW.ts中定义了一个名为BMW的类,如下所示:

///<reference path="../Thing.ts"/>

module Entities.Cars {

    import e = Entities;

    export class BMW extends Vehicle {

        public series: string;

         constructor ( model : string, series : string) {
            super("BMW", model)
            this.series = series;
        }

         drive() {
             alert("driving a bimmer is a different kind of feeling");
         }       

         toString() : string
         { 
             return this.getName() + " " + this.series + " " + this.getType();
         }
    }
}
当我在引用Thing和BMW TypeScript文件后尝试执行以下代码时:

var car = new Entities.Cars.BMW("335i", "E90");
car.drive();
我得到一个异常,出现以下错误“Microsoft JScript运行时错误:无法获取属性“BMW”的值:对象为null或未定义”。为BMW生成的Javascript有错误。我上面的代码有什么问题吗?

您的代码很好

我的猜测是,您没有将脚本标记正确地放置在head元素中(错误的顺序,或者匹配了一些)

解决这个问题的最简单方法是,通过设置--out选项,使用tsc编译器中的单个.js输出文件,而不必记住正确的声明序列

编辑:根据您使用的js场景(WSH、web app或其他js环境),您需要以不同方式链接js源文件。 以wsh为例,您可以使用FileSystemObject读取源文件,然后对其求值。
或者您可以使用AMDs…

您的代码没有问题,因此生成的
javascript
文件的导入顺序似乎是错误的。规范说明如下:

组成全局模块的源文件的初始化顺序最终取决于在运行时加载生成的JavaScript文件的顺序(例如,可以由引用生成的JavaScript文件的标记控制)

我已经生成了一个文件
app.ts
,如下所示:

module Entities {

    // Class
    export class Thing {

        private _name: string;
        private _type: string;

        // Constructor
        constructor (public name: string, public type: string) {
            this._name = name;
            this._type = type;
         }

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


        getType(): string { return this._type; }
        setType(name: string) {
            this._type = name;
        }

        toString() : string
        { 
            return "Entities.Thing";        
        }
    }

    export class Vehicle extends Thing {

        public cargoCapacity: number;
        public fuelType: string;
        public owner: string;

        constructor (make: string, model : string) {
            super(make, model)
        }

        drive() {
        }

        toString(): string {
            return "Entities.Vehicle";
        }
    }
}
///<reference path='Things.ts'/>
///<reference path='bmw/BMW.ts'/>
var car = new Entities.Cars.BMW("335i", "E90");
car.drive();

就这样,谢谢你。我没有在app.js中引用Thing.js和BMW.js。现在,TypeScript编译器在我的项目文件中配置如下:。我是否将整个内容更改为tsc--out app.js app.ts?传递了编译器选项-out scripts\app.js scripts\app.ts,我看到一个包含所有代码的Javascript文件。但是,如果我引用的都是app.js,我仍然得到未定义的实体…不知道之前发生了什么。选项1现在对我来说很好。再次感谢。
<html>
    <head>
        <script src="Things.js"></script>
        <script src="bmw/BMW.js"></script>
        <script src="app.js"></script>
    </head>
    <body>
    </body>
</html>