[英]Reassign a global variable
该段代码应该对内置全局变量存根(出于测试或调试目的):
function foo() {
Date = bar();
}
Date
全局已经在TypeScript库定义中声明,并且rhis将导致错误:
无法分配给“日期”,因为它是常量或只读属性。
我试图避免将其称为this['Date']
因为它与严格模式和window['Date']
或global['Date']
不兼容,因为代码是跨平台的,并且是唯一可靠的获取方法全局是eval
(我也试图避免它)。
这里有什么选择? 将foo
函数从.ts提取到无类型的.js文件是唯一的选择吗?
根据TypeScript标准库, Date
是const
全局变量。 如果您希望能够在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.