重新分配全局变量

时间:2018-04-09 10:24:35

标签: typescript

这段代码应该是内置的全局变量(用于测试或调试目的):

function foo() {
    Date = bar();
}
已经在TypeScript库定义中声明了

Date全局,并且这将导致错误:

  

无法指定日期'因为它是常量或只读属性。

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

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

1 个答案:

答案 0 :(得分:1)

根据{{​​3}},

Dateconst个全局变量。如果您希望能够在获得TypeScript批准的情况下分配或重新分配它(意味着编译器将分配识别为有效),则需要使用您自己编辑的本地版本替换标准库。但是我知道你不想这样做,因为大概你还是希望其他人不能自由地重新分配Date之类的东西。

如果您实际上正在考虑将您的功能转移到未经检查的JavaScript(假设您没有使用--checkJs the TypeScript standard library这可能只是将问题带回来),那么一个不那么激烈的措施就是抑制使用compiler option指令注释的那一行的错误:

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

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

  

我们建议您非常谨慎地使用[ese]评论

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