在c#中,您可以执行#if DEBUG ...在调试时执行一些特殊操作 . 我想在Typescript中做类似的事情,以便我可以在测试时设置表单值 .
任何人都有关于如何在Typescript中实现这一点的任何建议?
我提出的最好的是设置类:
export class Settings {
static isDebugging = false;
};
然后在启动应用程序时,我将其设置为true .
然后在代码中,我导入类并检查它是否为真 .
if (Settings.isDebugging)...
似乎工作正常 .
3 回答
如果你想从C#中获得类似于
#if
指令的东西,那么在构建应用程序时你必须制作一些剥离某些代码的东西 .为此,您可以使用一些构建插件 . 有一些构建插件(参见here和here)将在构建时剥离这样的注释内的代码:
但是,通过使用这些插件,您可能会在
test-code
或end-test-code
的拼写错误中导致您将测试代码留在 生产环境 中 . 你不会得到关于它的编译错误 .因此,最好找到一个基于其名称去除函数的构建插件(参见here - 很遗憾,我找不到这个插件) . 那样你就可以这样写:
然后使用它:
然后告诉构建脚本在它不是 生产环境 版本时去掉该函数的使用 .
总的来说,只需检查一个布尔值的简单解决方案就足够了 .
像
#if DEBUG
这样的标志在TypeScript中不可用,因为编译输出始终是相同的 . 在C#中编译为调试模式时,DLL
文件包含一些用于调试的额外信息 . 在发布模式下,信息被省略,DLL
文件更轻 .如果您使用自动构建环境(如Gulp或Grunt),则可以将设置存储在
/config/debug/config.ts
和/config/release/config.ts
等文件夹下,然后您可以创建两个任务:一个用于调试:
一个发布
复制一个或另一个文件 .
有一些代码可以将预处理程序指令添加到TypeScript中:https://github.com/Microsoft/TypeScript/issues/4691
但是,它正在讨论中它是否会成为TypeScript的一部分 . 然后,解决方法主要是使用外部构建工具,或不同的配置选项(在编译时剥离代码)和魔术变量(在运行时只禁用代码路径)