2013-09-01 3 views
21

Я просто пытаюсь получить мою голову вокруг машинописи,Импортирующей машинопись модули

Скажет, у меня есть модуль 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 (я получаю ошибки, когда я пытаюсь это сделать)?
+1

[Документация для импорта] (https://github.com/Microsoft/TypeScript-Handbook/blob/master/pages/Namespaces%20and%20Modules.md) –

ответ

30

Когда вы используете внешние модули, каждый файл является модулем. Таким образом, объявление локального внутреннего модуля в файле, например. 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

+0

Я видел в угловом им импортированном модуле (скажем, '' NgModule) ', тогда они сказали' @NgModule ({}) '. Что это значит? Я имею в виду '@ NgModule' (Большое спасибо) – M98

3

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

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

    var animals = require("animals");

  2. Использование import стиля, который начал suppurts из ES6:

    import { Elephant, Horse } from "animals";

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

Подробнее об этом можно узнать на official the TypeScript Modules web page.

Смежные вопросы