2016-04-25 1 views
1

Я пытаюсь создать большое угловое приложение в машинописном, и я хочу, чтобы мое приложение изложил следующую структуру папок:машинопись синтаксис импорта с несколькими файлами

./app
--- Контроллеры
--- --- HomeController.ts
--- --- SomeOtherController.ts
--- Директивы
--- --- MyDirective.ts
--- app.ts

Мне также хотелось бы, чтобы пространства имен/модулей были выложены, поэтому все контроллеры находятся в пространстве имен MyApp.Controllers. Таким образом, в приведенном выше примере я бы иметь 2 контроллера в модулях:

MyApp.Controllers.HomeController
MyApp.Controllers.SomeOtherController

Я установить это делает следующее:

HomeController. ц:

export module MyApp.Controllers { 
    export class HomeController { 
     ... 
    } 
} 

SomeOtherController.ts

export module MyApp.Controllers { 
    export class SomeOtherController { 
     ... 
    } 
} 

Сейчас в app.ts Я хочу, чтобы импортировать все мои контроллеры, и это, где я бегу в проблемы, я стараюсь:

import * as Controllers from './controllers/HomeController' 

, но затем получить доступ к контроллеру у меня есть :

Controllers.MyApp.Controllers 

Какая уродливость. Также как мне получить контроллер из другого файла? В идеале я хотел бы импортировать все в пространство имен «MyApp.Controllers», и мы можем использовать его без префикса MyApp.Controllers в коде.

ответ

3

Вы должны уйти от способа мышления, которое обычно подходит для таких языков, как C#/Java, где вы организуете свой код с использованием пространств имен. Если машинописный текст вы организуете свой код, используя подход, похожий на файловую систему, где у вас есть папки и файлы.

  • Каждый файл уже является модулем - так избавиться от export module внутри ваших ts-файлов.
  • Вы группируете логически связанные классы внутри одного файла, в идеале один класс для каждого файла.
  • Вы группируете файлы вместе внутри папок для дальнейшей структуры вашего приложения.

Так что в вашем случае после удаления export module вы будете использовать контроллеры, как это:

import {HomeController} from './controllers/HomeController' 

Надеются, что это помогает.

+0

Это помогает! Просто ради интереса, какова цель «модуля экспорта»? Когда я должен использовать это? – Mikeb

+0

Вы по-прежнему можете использовать 'export module' или' export namespace', если по какой-то причине вы в одном файле экспортируете действительно большое количество классов/интерфейсов, - тогда вы можете структурировать их в одном файле, разбив их на разные модули. Но в таких случаях я лично рекомендую вместо этого создать два файла. Для более подробного объяснения - это хороший поток для чтения: http://stackoverflow.com/questions/30357634/how-do-i-use-namespaces-with-typescript-external-modules – Amid

0

Я не уверен, как уйти от «уродливых» контроллеров.MyApp.Контроллеры, где вы должны указать полное имя пространства имен +.

Теперь, ИМХО (по моему скромному мнению), я думаю, что в этом нет ничего «уродливого». Вам нужно будет только полностью определить имя, если вы ссылаетесь на него из другого пространства имен. Но если вы ссылаетесь на него из одного и того же пространства имен, вам не требуется полное имя. Имеет смысл?

Кроме того, я предпочитаю добавлять всю ссылку в один файл .TS (например, Reference.ts) и только этот файл Reference.ts. Этот файл ссылки ссылается на все .TS-файлы в проекте в порядке сортировки (так что компилятор может правильно компилировать сверху вниз).

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