在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)
似乎工作正常.
如果您想实现类似于#ifC# 中的指令的功能,那么您必须在构建应用程序时制作一些去除某些代码的东西。
为此,您可以使用一些构建插件。有一些构建插件(见这里和这里)会在构建时删除这样的注释中的代码:
/* test-code */
removeMeInProduction();
/* end-test-code */
Run Code Online (Sandbox Code Playgroud)
但是,通过使用这些插件,您可能会在拼写错误test-code或end-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)
然后告诉构建脚本在它不是生产构建时去掉该函数的使用。
总的来说,您只检查布尔值的简单解决方案就足够了。
像这样#if DEBUG的标志在 TypeScript 中不可用,因为编译输出总是相同的。在 C# 中,当您编译为调试模式时,DLL文件包含一些用于调试的额外信息。在发布模式中,信息被省略并且DLL文件更轻。
如果你使用像Gulp或Grunt这样的自动化构建环境,你可以将你的设置存储在一个文件夹下/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)
复制一个或另一个文件。
#ifdef我一直认为在 JavaScript 程序中使用 C 预处理器来处理条件是很不错的。不过,Haven\xe2\x80\x99t 还尝试过使用 TypeScript。这里\xe2\x80\x99是一个关于它的很好的页面:http ://www.nongnu.org/espresso/js-cpp.html 。
链接中共享的命令是:
\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\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
10129 次 |
| 最近记录: |