Импорт модулей 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
(я получаю ошибки при попытке сделать это)?
Ответы
Ответ 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 Модули.