在c#中,您可以执行#if DEBUG ...在调试时执行一些特殊操作。我想在Typescript中做类似的事情,以便我可以在测试时设置表单值。
任何人都有关于如何在打字稿中实现这一点的任何建议吗?
我想出的最好的是设置类:
if (Settings.isDebugging)...
然后在启动应用程序时,我将其设置为true。
然后在代码中,我导入该类并检查它是否为真。
{{1}}
似乎工作正常。
答案 0 :(得分:4)
DLL
之类的标志在TypeScript中不可用,因为编译输出始终相同。在C#编译到调试模式时,DLL
文件包含一些用于调试的额外信息。在发布模式下,信息被省略,/config/debug/config.ts
文件更轻。
如果您使用的是Gulp或Grunt等自动构建环境,则可以将设置存储在/config/release/config.ts
和$ gulp bundle-debug
等文件夹下,然后您可以创建两个任务:
一个用于调试:
$ gulp bundle-release
一个发布
Int.Parse()
复制一个或另一个文件。
答案 1 :(得分:4)
如果你想从C#中获得与#if
指令类似的东西,那么你必须在构建应用程序时制作一些删除某些代码的东西。
为此,您可以使用一些构建插件。有一些构建插件(请参阅here和here)将在构建时删除像这样的注释中的代码:
/* test-code */
removeMeInProduction();
/* end-test-code */
但是,通过使用这些插件,您可能会在拼写test-code
或end-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