导入TypeScript模块

时间:2013-09-01 07:22:06

标签: typescript

我只是试图了解TypeScript,

假设我有一个像这样的模块animals.ts

export module Animals {

    export interface Animal {
        name(): void;
    }

    export class Elephant implements Animal {

        constructor() {

        } 

        public name() {
            console.log("Elephant");
        }
    }

    export class Horse implements Animal {

        constructor() {

        }

        public name() {
            console.log("Horse");
        }
    }
}

我想在另一个文件animals_panel.ts中使用此模块:

import animals = require("animals")

module AnimalPanel {

    var animal = new animals.Animals.Elephant();
    animal.name();
}
  1. 我必须使用animals.Animals.Elephant()对我来说似乎有点奇怪,我原以为Animals.Elephant()。我做错了什么或者这是正确的行为吗?
  2. 是否可以在import animals = require("animals")模块中导入AnimalPanel(我尝试这样做时会出错)?

2 个答案:

答案 0 :(得分:32)

当您使用外部模块时,每个文件都是一个模块。因此,在文件中声明本地内部模块,例如export module Animals {导致不必要的双重间接。

我会将animals.ts编码为:

export interface Animal {
    name(): void;
}

export class Elephant implements Animal {

    constructor() {

    } 

    public name() {
        console.log("Elephant");
    }
}

export class Horse implements Animal {

    constructor() {

    }

    public name() {
        console.log("Horse");
    }
}

然后将其用作:

import animals = require("animals")

module AnimalPanel {

    var animal = new animals.Elephant();
    animal.name();
}

PS:内部/外部打字稿模块的主题视频:http://www.youtube.com/watch?v=KDrWLMUY0R0&hd=1

答案 1 :(得分:3)

您可以使用两种语法export/import

    ES5中支持的
  1. (AMD风格)Require语法:

    var animals = require("animals");

  2. 使用从{ES6开始支持的import样式:

    import { Elephant, Horse } from "animals";

  3. TypeScript支持export =为传统的CommonJSAMD工作流建模。所以这两种变体都可以使用,我建议使用2nd,因为它更强大的机制。

    有关它的更多详细信息,请参阅official the TypeScript Modules web page