angular 2命名空间模型

Tob*_*ler 7 typescript angular

如何在角度2中使用模型类?

这是一个例子

模型

namespace model.car {
    export class CoolCar {
        Id: string;
        Name: string;

        constructor(){
        }
    }

    export class NiceCar {
        Id: string;
        Name: string;

        constructor(){
        }
    }
}

namespace model.bike {
    export class AwesomeBike {
        Id: string;
        Name: string;

        constructor(){
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我想在我的课堂上使用它们

var car=new model.car.CoolCar();
Run Code Online (Sandbox Code Playgroud)

但是当我在浏览器中运行它时,我收到一个错误

"ReferenceError: 'model' is undefined"
Run Code Online (Sandbox Code Playgroud)

我试着像这样导入模型类

import {CoolCar} from '../model/car/CoolCar'
Run Code Online (Sandbox Code Playgroud)

但后来我在VS2015中遇到错误:

File "c:/...../model/car/CoolCar.ts is" no module
Run Code Online (Sandbox Code Playgroud)

有人可以帮我吗?

托比亚斯

mar*_*tin 5

export如果要公开命名空间,则需要使用关键字。例如:

// MyModels.ts
export namespace car {
    export class NiceCar {
        Id: string;
        constructor(public name: string) {}
    }
}

export namespace bike {
    export class AwesomeBike {
        Id: string;
        constructor(public name: string) { }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后将这些命名空间用于:

// main.ts
import * as model from './MyModels';

let car = new model.car.NiceCar('my nice car');
let bike = new model.bike.AwesomeBike('my awesome bike');

console.log(car);
console.log(bike);
Run Code Online (Sandbox Code Playgroud)

注意我在model命名空间下导入这些类,该命名空间仅在导入时指定,而不是在MyModels.ts.

这在编译为 JS 并运行时将打印到控制台:

$ node main.js 
NiceCar { name: 'my nice car' }
AwesomeBike { name: 'my awesome bike' }
Run Code Online (Sandbox Code Playgroud)

请注意,通常不鼓励在 TypeScript 中使用命名空间。请参阅如何将命名空间与 TypeScript 外部模块一起使用?