这段代码应该是内置的全局变量(用于测试或调试目的):
function foo() {
Date = bar();
}
已经在TypeScript库定义中声明了 Date
全局,并且这将导致错误:
无法指定日期'因为它是常量或只读属性。
我试图避免将其称为this['Date']
,因为它与严格模式和window['Date']
或global['Date']
不兼容,因为代码是跨平台的,并且获得全球化的唯一可靠方法是eval
(我也试图避免它)。
这里有什么选择?将foo
函数从.ts提取到无类型.js文件是唯一的选项吗?
答案 0 :(得分:1)
Date
是const
个全局变量。如果您希望能够在获得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]评论 。
希望有所帮助。祝你好运!