Разрешение относительного имени модуля TypeScript 1.8 в модулях стиля AMD с RequireJS 2.1

Я пытаюсь использовать TypeScript в части устаревшей системы JS. В этой системе существует множество приложений, которые выполняются в среде RequireJS, где main.js будет выполняться при запуске этого приложения. Я создал эту структуру

App1/
   main.js
   app.ts
   Modules/
      myModule.ts
      Models/
         model1.js
         model2.js

Модели представляют собой сгенерированные коды и должны оставаться в виде файлов .JS. Модели должны запрашиваться операторами «Require» из разных модулей .ts.

Я знаю, как использовать что-то подобное в файле объявления в папке модулей, чтобы компилировать файлы .ts.

   declare module "Models/model1" { var x:any; export = x;}  

Но код не будет выполняться, потому что это создаст такое определение модуля AMD для myModule.ts.

define(["require","exports","Models/model1", function(require,exports,model){ ...

но путь разрешается Require.JS как

 http://mysite/Models/model1.js

в котором отсутствуют разделы пути, потому что путь является относительным и должен быть абсолютным из корня контекста RequireJS. Я не могу иметь модели в качестве TS, потому что они являются сгенерированными файлами. Они не компилируются просто путем переименования в .ts, а неотносительные пути нельзя использовать из-за разных способов запуска приложения в жгутах, производственных и модульных тестах.

Вопрос. Есть ли способ заставить TypeScript генерировать относительные пути для модулей JavaScript (.js)?


person n00b    schedule 08.11.2016    source источник


Ответы (1)


Вы изучили директивы Triple-Slash? Начиная с TypeScript 2.0 это устарело для import "moduleName", но должно работать для более старых версий:

/// <amd-dependency path="x" /> информирует компилятор о зависимости модуля, отличной от TS, которую необходимо внедрить в результирующем вызове require модуля.

Директива amd-dependency также может иметь необязательное свойство name; это позволяет передать необязательное имя для amd-зависимости:

/// <amd-dependency path="legacy/moduleA" name="moduleA"/>
declare var moduleA:MyType
moduleA.callStuff()

Сгенерированный JS-код:

define(["require", "exports", "legacy/moduleA"], function (require, exports, moduleA) {
    moduleA.callStuff()
});
person Jesse Johnson    schedule 08.11.2016