2016-02-21 3 views
0

Я новичок в TypScript и пытаюсь разглядеть пространство имен и как ссылаться на интерфейсы, которые были определены в отдельных файлах. Я исхожу из фон .NET C#, поэтому я использовал для создания каждого класса & интерфейса в собственном файле.Типы имен имен и дубликаты идентификаторов в файле конкатенированных js

INationalRailService:

//// <reference path="../../../../typings/tsd.d.ts" /> 
/// <reference path="../../../../typings/app.d.ts" /> 

namespace Interfaces { 
    export interface INationalRailService { 
     getDepartures(city: String): ng.IPromise<IQueryResult>; 
     getArrivals(city: String): ng.IPromise<IQueryResult>; 
    } 
} 

IJourney.ts

namespace Interfaces { 
    export interface IJourney { 
     locationName: string; 
     crs: string; 
     via: string; 
     futureChangeTo: string; 
     assocIsCancelled: boolean; 
    } 
} 

В tsd.d.ts у меня есть ссылки на базы я использую, а именно Угловое, JQuery, Машинопись, toastr и угловой маршрут.

В моем app.d.ts файл у меня есть ссылки на .ts файлы, которые я создал

// Interfaces 
/// <reference path="../src/app/NationalRailViewerApp/Interfaces/ITrainServices.ts" /> 
/// <reference path="../src/app/NationalRailViewerApp/Interfaces/INationalRailService.ts" /> 
/// <reference path="../src/app/NationalRailViewerApp/Interfaces/IParameters.ts" /> 
/// <reference path="../src/app/NationalRailViewerApp/Interfaces/IJourney.ts" /> 
/// <reference path="../src/app/NationalRailViewerApp/Interfaces/IQueryResult.ts" /> 

// Implementations 
/// <reference path="../src/app/NationalRailViewerApp/Implementations/QueryResult.ts" /> 
/// <reference path="../src/app/NationalRailViewerApp/Implementations/Journey.ts" /> 
/// <reference path="../src/app/NationalRailViewerApp/Implementations/NationalRailService.ts" /> 
/// <reference path="../src/app/NationalRailViewerApp/Implementations/TrainServices.ts" /> 

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

Мои проблемы возникают, когда я пытаюсь перевести это на Javascript (ES5). Мой бегун задачи gulp использует gulp-typescript для вывода моего javascript в один .js-файл с помощью опции конфигурации {out: 'output.js'}.

Однако я получаю предупреждение о том, что существует «Дублирующий идентификатор» «Интерфейсы», а затем мой результирующий угловой модуль не загружается.

Если я хочу, чтобы эти интерфейсы были доступны для других файлов через общее пространство имен, почему это вызывает проблемы в результирующем Javascript?

Я злоупотребляю ключевым словом пространства имен или недоразумением, как это должно работать? Могу ли я использовать пространства имен, если я намерен объединить полученный javascript в один файл?

Я пытался исправить это сам, прочитав следующую статью,

Typescript Namespaces

, но я просто не могу получить мою голову вокруг которого я должен использовать для этого примера, пространство имен или модули.

+0

этот пример отлично работает для меня, однако я не использую ссылочный тег для настройки проекта, вместо этого у меня есть tsconfig.json, созданный с помощью tsc --init. – toskv

+0

Итак, похоже, что все, что вы делаете, правильно, хотя я использую msbuild, чтобы перекрыть мой TypeScript, что делает его таким, что мне не нужно использовать теги (так как он автоматически использует весь файл .ts в проекте). Какова фактическая ошибка времени выполнения, которая предотвращает загрузку вашего углового модуля? –

+0

Это была общая ошибка загрузки модуля. К счастью, теперь, с включением файла tsconfig.js (я думаю, что это исправлено) и некоторой переделки, чтобы удалить ссылки /// и полностью определить имена интерфейсов, я смог заставить его успешно завершить и запустить. –

ответ

0

Оказывается, проблема была в моем редакторе (код VS). Когда я закрыл и снова открыл редактор после сборки gulp моего проекта, ошибки в дубликатах исчезли.

Спасибо за ответы в любом случае, ребята.

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