TypeScript: компиляция удаляет импорт без ссылок

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

Пример:

define(['definitely/goingto/usethis/','just/referencingthis/forpackaging'], function(useThis) {
    useThis.likeIPromised();

    // the following call can only be made when the second required file is available
    someGlobalAvailableVariable.someMethod();
});

Это работает как ожидается при написании моих модулей в JavaScript. Однако мы переводим наш проект шаг за шагом на TypeScript. В приведенном выше примере это приводит к:

import useThis = module("definitely/goingto/usethis/");
import whatever = module("just/referencingthis/forpackaging");

useThis.likeIPromised();

// I've written a definition file so the following statement will evaluate
someGlobalAvailableVariable.someMethod();

И при компиляции этого кода на JavaScript, компилятор хочет быть полезным и удаляет любые неиспользуемые импорты. Таким образом, это нарушает мой код, потому что второй импортированный модуль недоступен.

Моя текущая работа заключается в том, чтобы включить избыточное задание, но это выглядит уродливо:

import whatever = module("just/referencingthis/forpackaging");
var a = whatever; // a is never ever used further down this module

Кто-нибудь знает, возможно ли настроить компилятор TypeScript для оптимизации модулей во время компиляции?

Ответ 1

Лучшее решение (проверено с TS 1.8):

import 'just/referencingthis/forpackaging';

Директива trid-slash-зависимостей amd-зависимости работает только в том случае, если другие требуют импорта; только наличие директив amd-зависимостей приводит к компилятору TypeScript, генерирующему JavaScript полностью без определения модуля.

Ответ 2

Вы можете сделать это в верхней части своего файла (вместо import):

/// <amd-dependency path="just/referencingthis/forpackaging" />