预处理器在Typescript中定义

Gre*_*Gum 12 typescript

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

任何人都有关于如何在Typescript中实现这一点的任何建议?

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

export class Settings {
    static isDebugging = false;
};
Run Code Online (Sandbox Code Playgroud)

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

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

if (Settings.isDebugging)...
Run Code Online (Sandbox Code Playgroud)

似乎工作正常.

Dav*_*ret 7

如果您想实现类似于#ifC# 中的指令的功能,那么您必须在构建应用程序时制作一些去除某些代码的东西。

为此,您可以使用一些构建插件。有一些构建插件(见这里这里)会在构建时删除这样的注释中的代码:

/* test-code */
removeMeInProduction();
/* end-test-code */
Run Code Online (Sandbox Code Playgroud)

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

正因为如此,最好找到一个构建插件,根据它的名称剥离一个函数(见这里 -不幸的是我找不到一个 gulp 插件)。这样你就可以写出这样的东西:

function ifNotProduction(func: () => void) {
    func();
}
Run Code Online (Sandbox Code Playgroud)

然后使用它:

ifNotProduction(() => {
    console.log("Only run when test.");
});
Run Code Online (Sandbox Code Playgroud)

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

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


Rem*_*sen 5

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

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

一种用于调试:

$ gulp bundle-debug
Run Code Online (Sandbox Code Playgroud)

和一个释放

$ gulp bundle-release
Run Code Online (Sandbox Code Playgroud)

复制一个或另一个文件。


esk*_*ier 5

#ifdef我一直认为在 JavaScript 程序中使用 C 预处理器来处理条件是很不错的。不过,Haven\xe2\x80\x99t 还尝试过使用 TypeScript。这里\xe2\x80\x99是一个关于它的很好的页面:http ://www.nongnu.org/espresso/js-cpp.html 。

\n\n

链接中共享的命令是:

\n\n
# configure your web server to pipe Javascript through GNU cpp:\n/usr/bin/cpp -P -undef -Wundef -std=c99 -nostdinc -Wtrigraphs -fdollars-in-identifiers -C\n
Run Code Online (Sandbox Code Playgroud)\n