首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >预处理器在Typescript中定义

预处理器在Typescript中定义
EN

Stack Overflow用户
提问于 2015-10-02 19:22:44
回答 4查看 18K关注 0票数 22

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

有人对如何在Typescript中实现这一点有什么建议吗?

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

代码语言:javascript
复制
export class Settings {
    static isDebugging = false;
};

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

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

代码语言:javascript
复制
if (Settings.isDebugging)...

看起来工作正常。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-10-02 22:22:47

如果您想从C#获得类似于#if指令的东西,那么您必须在构建应用程序时剥离某些代码。

要做到这一点,您可以使用一些构建插件。有一些构建插件(参见herehere)可以在构建时剥离注释中的代码:

代码语言:javascript
复制
/* test-code */
removeMeInProduction();
/* end-test-code */

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

正因为如此,最好是找到一个构建插件,它可以根据函数的名称对其进行拆分(请参阅here-unfortunately I‘t find a gulp )。这样你就可以写出类似这样的代码:

代码语言:javascript
复制
function ifNotProduction(func: () => void) {
    func();
}

然后使用它:

代码语言:javascript
复制
ifNotProduction(() => {
    console.log("Only run when test.");
});

然后告诉构建脚本,当它不是生产构建时,去掉该函数的使用。

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

票数 7
EN

Stack Overflow用户

发布于 2015-10-02 19:57:33

#if DEBUG这样的标志在TypeScript中不可用,因为编译输出总是相同的。在C#中,当您编译到调试模式时,DLL文件包含一些用于调试的额外信息。在发布模式中,该信息被省略,且DLL文件较轻。

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

一个用于调试:

代码语言:javascript
复制
$ gulp bundle-debug

还有一个用于发布

代码语言:javascript
复制
$ gulp bundle-release

复制一个或另一个文件。

票数 5
EN

Stack Overflow用户

发布于 2015-10-05 09:04:30

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

然而,它是否会成为TypeScript本身的一部分还在讨论中。在此之前,解决办法主要是使用外部构建工具,或不同的配置选项(在编译时剥离代码)和魔法变量(仅在运行时禁用代码路径)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32906097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档