繁体   English   中英

重新分配全局变量

[英]Reassign a global variable

该段代码应该对内置全局变量存根(出于测试或调试目的):

function foo() {
    Date = bar();
}

Date全局已经在TypeScript库定义中声明,并且rhis将导致错误:

无法分配给“日期”,因为它是常量或只读属性。

我试图避免将其称为this['Date']因为它与严格模式和window['Date']global['Date']不兼容,因为代码是跨平台的,并且是唯一可靠的获取方法全局是eval (我也试图避免它)。

这里有什么选择? foo函数从.ts提取到无类型的.js文件是唯一的选择吗?

根据TypeScript标准库, Dateconst全局变量。 如果您希望能够在TypeScript的批准下进行分配或重新分配(这意味着编译器将分配识别为有效),则需要用自己编辑的本地版本替换标准库。 但是我认为您不想这样做,因为大概您仍然希望其他任何人都可以自由地重新分配Date之类的东西。

如果您实际上正在考虑将函数移至未经检查的JavaScript(假设您未使用--checkJs 编译器选项 ,这可能只会使问题再次出现),那么一种较不严格的措施是使用@ts-ignore抑制该行的错误。 @ts-ignore指令注释:

function foo() {
    //@ts-ignore: Cannot reassign to const Date    
    Date = bar();
}

请注意,这不会使编译器将重新分配视为有效。 它只是防止报告下一行的任何错误。 因此,例如,如果将bar()误拼为barr() ,仍然不会报告错误。 如果抑制的错误将导致代码其他部分出现问题,则这些问题仍然存在。 这与重新分配const变量无关,因为在发生此类错误后,编译器仍会保留变量的类型和const 但是请务必注意, @ts-ignore指令作为一种工具既平淡又危险,应谨慎使用。 或者,如链接的手册文档所述,

我们建议您非常谨慎地使用这些注释。

希望能有所帮助。 祝好运!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM