预处理器在Typescript中定义

时间:2015-10-02 11:22:44

标签: typescript

在c#中,您可以执行#if DEBUG ...在调试时执行一些特殊操作。我想在Typescript中做类似的事情,以便我可以在测试时设置表单值。

任何人都有关于如何在打字稿中实现这一点的任何建议吗?

我想出的最好的是设置类:

if (Settings.isDebugging)...

然后在启动应用程序时,我将其设置为true。

然后在代码中,我导入该类并检查它是否为真。

{{1}}

似乎工作正常。

5 个答案:

答案 0 :(得分:4)

DLL之类的标志在TypeScript中不可用,因为编译输出始终相同。在C#编译到调试模式时,DLL文件包含一些用于调试的额外信息。在发布模式下,信息被省略,/config/debug/config.ts文件更轻。

如果您使用的是GulpGrunt等自动构建环境,则可以将设置存储在/config/release/config.ts$ gulp bundle-debug 等文件夹下,然后您可以创建两个任务:

一个用于调试:

$ gulp bundle-release

一个发布

Int.Parse()

复制一个或另一个文件。

答案 1 :(得分:4)

如果你想从C#中获得与#if指令类似的东西,那么你必须在构建应用程序时制作一些删除某些代码的东西。

为此,您可以使用一些构建插件。有一些构建插件(请参阅herehere)将在构建时删除像这样的注释中的代码:

/* test-code */
removeMeInProduction();
/* end-test-code */

但是,通过使用这些插件,您可能会在拼写test-codeend-test-code时出错,导致您将测试代码留在生产中。你不会得到关于它的编译错误。

因此,最好找一个基于其名称剥离函数的构建插件(参见here - 遗憾的是我无法找到一个gulp插件)。这样你可以这样写:

function ifNotProduction(func: () => void) {
    func();
}

然后使用它:

ifNotProduction(() => {
    console.log("Only run when test.");
});

然后告诉构建脚本在它不是生产版本时去除该函数的使用。

总的来说,只需检查布尔值的简单解决方案就足够了。

答案 2 :(得分:2)

有一些代码可以在TypeScript中添加对预处理程序指令的支持:https://github.com/Microsoft/TypeScript/issues/4691

然而,正在讨论它是否会成为TypeScript的一部分。然后,解决方法主要是使用外部构建工具,或不同的配置选项(在编译时剥离代码)和魔术变量(在运行时只禁用代码路径)

答案 3 :(得分:1)

我一直认为对于JavaScript程序中的#ifdef条件使用C预处理器是很巧妙的。还没有用TypeScript尝试过。这是一个不错的页面:http://www.nongnu.org/espresso/js-cpp.html

在链接中共享的命令是:

# configure your web server to pipe Javascript through GNU cpp:
/usr/bin/cpp -P -undef -Wundef -std=c99 -nostdinc -Wtrigraphs -fdollars-in-identifiers -C

答案 4 :(得分:0)

我找到了这个项目,该项目增加了以下功能:https://github.com/domchen/typescript-plus

这添加了以下功能:

typescript-plus编译器为原始脚本提供了额外的功能 打字稿编译器,例如访问器优化,类反射, 条件编译,最有用的一种:自动 通过分析代码中的依赖关系来对源文件进行重新排序。 该编译器已集成到白鹭引擎中, 被它使用。

该项目将尝试与最新版本的 原始的TypeScript项目。

当前TypeScript版本:3.1.3