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

Posted

技术标签:

【中文标题】TypeScript:编译删除未引用的导入【英文标题】:TypeScript: compiling removes unreferenced imports 【发布时间】:2013-02-22 10:41:43 【问题描述】:

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

【问题讨论】:

我假设您不能只是将导入移动到适当的模块? 它们在相应的模块中。我的项目主要由小部件组成。每个小部件都打包在自己的模块中。我正在使用 Handlebars 进行模板化,并希望将生成的视图与我的小部件定义文件一起打包。当引用这样的视图时,它将在全局变量“Handlebars”上公开一个同名的方法。因此我不需要引用该模块,因为它会为我定义方法。 【参考方案1】:

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

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

【讨论】:

同意,希望记录在案 太棒了!非常感谢。 如果我使用commonjs怎么办?我希望有一个命令行标志来关闭它:-( 如果使用 commonjs 或 systemjs,此答案似乎不起作用 这是在 Typescript 1.5 中添加的别名 -> github.com/Microsoft/TypeScript/wiki/…【参考方案2】:

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

import 'just/referencingthis/forpackaging';

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

【讨论】:

以上是关于TypeScript:编译删除未引用的导入的主要内容,如果未能解决你的问题,请参考以下文章

允许 typescript 编译没有未使用的变量规则

WebStorm中的“未定义步骤引用”在尝试时引用TypeScript步骤定义代码

在 typescript 中引用 VSS.SDK。错误:未定义 VSS

如何将 JQuery 导入 Typescript 文件?

如何为 TypeScript 定义文件导入文件

使用 TypeScript 导入节点模块