Теперь я уверен, что проблема в том, что есть включенный файл d.ts, который содержит модуль под названием «Shared» и оператор require, который включает переменную с тем же именем, если он используется в среде NodeJS.
// shared.d.ts
declare module Shared { ... }
// other_module.ts
/// <reference path="shared.d.ts"/>
if(require) { var Shared = require("shared"); }
export class Something {
public someVar = new Shared.SomethingElse("blah");
}
Поэтому, когда я компилирую other_module.ts
(который на самом деле представляет собой множество отдельных файлов), он говорит мне, что Shared — это повторяющийся идентификатор, что я могу понять, поскольку TS думает, что Shared — это модуль, но затем мне говорят, что это возврат запроса.
Проблема здесь в том, что выходные данные модулей должны быть совместимы с системой требований nodeJS, поэтому в этом случае, когда требуется other_module, он будет в своей собственной области и не будет знать о Shared.SomethingElse
, поэтому требуется требование, поэтому внутренние модули в other_module
сможет получить доступ к общей библиотеке, но в среде браузера он получит Shared.SomethingElse
через глобальную область.
Если я удалю ссылку, файл не скомпилируется, так как он не знает о Shared
, если я удалю требование, когда модуль загружается в nodejs (var otherModule = require("other_module")
), он будет жаловаться, что не знает о Shared
. Так есть ли способ решить эту проблему?