Подтвердить что ты не робот

Импорт модулей 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();
}
  • Мне кажется немного странным, что я должен использовать animals.Animals.Elephant(), я бы ожидал Animals.Elephant(). Я что-то делаю неправильно или это правильное поведение?
  • Можно ли импортировать import animals = require("animals") внутри модуля AnimalPanel (я получаю ошибки при попытке сделать это)?
4b9b3361

Ответ 1

Когда вы используете внешние модули, каждый файл является модулем. Таким образом, объявление локального внутреннего модуля в файле, например. export module Animals { приводит к ненужной двойной косвенности.

Я бы закодировал animal.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: видео по этому вопросу внутренних/внешних модулей typescript: http://www.youtube.com/watch?v=KDrWLMUY0R0&hd=1

Ответ 2

Вы можете использовать 2 типа синтаксиса export/import:

  • (стиль AMD) Require, который поддерживается в ES5:

    var animals = require("animals");

  • Используйте стиль import, который запустил suppurts из ES6:

    import { Elephant, Horse } from "animals";

TypeScript поддерживает export = для моделирования традиционного рабочего процесса CommonJS и AMD. Поэтому оба варианта будут работать, и я предлагаю использовать 2-й, потому что это более мощный механизм.

Более подробную информацию об этом можно найти на официальной веб-странице TypeScript Модули.