TypeScript:编译删除未引用的导入

时间:2013-03-07 09:40:22

标签: javascript requirejs typescript amd tsc

在我们的项目中,我们使用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编译器配置为在编译期间不优化模块?

2 个答案:

答案 0 :(得分:26)

您可以在文件顶部执行此操作(而不是import):

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

答案 1 :(得分:8)

更好的解决方案(使用TS 1.8测试):

protocol https

amd-dependency triple-slash-directive似乎只有在有其他需要导入时才有效;只有amd-dependency指令才会导致TypeScript编译器在没有模块定义的情况下完全生成JavaScript。