Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 重新分配全局变量_Typescript - Fatal编程技术网

Typescript 重新分配全局变量

Typescript 重新分配全局变量,typescript,Typescript,这段代码应该是存根内置全局变量(用于测试或调试目的): Dateglobal已在TypeScript库定义中声明,rhis将导致错误: 无法分配给“日期”,因为它是常量或只读属性 我试图避免将其称为this['Date'],因为它与严格模式和window['Date']或global['Date']不兼容,因为代码是跨平台的,而获取全局的唯一可靠方法是eval(我也试图避免它) 这里有什么选择?将foo函数从.ts提取到非类型化的.js文件是唯一的选项吗?Date是一个const全局变量,根据。

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

Date
global已在TypeScript库定义中声明,rhis将导致错误:

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

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


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

Date
是一个
const
全局变量,根据。如果您希望能够在TypeScript的批准下分配或重新分配它(这意味着编译器会将分配识别为有效),则需要使用您自己编辑的本地版本替换标准库。但我想你不想这么做,因为你大概还是不想让别人自由地重新分配日期之类的

如果您实际上正在考虑将函数移动到未经检查的JavaScript(假设您没有使用
--checkJs
,这可能会使问题再次出现),那么一个不太激烈的措施是使用指令注释抑制该行的错误:

function foo() {
    //@ts-ignore: Cannot reassign to const Date    
    Date = bar();
}
请注意,这不会使编译器将重新分配识别为有效;它只是防止报告下一行中的任何错误。因此,例如,如果您将
bar()
拼错为
barr()
,仍然不会报告错误。如果抑制的错误会导致代码的其他部分出现问题,那么这些问题仍然存在。这与重新分配
const
变量无关,因为编译器在发生此类错误后仍然保持变量的类型和
const
属性。但是请注意,作为一种工具,
@ts ignore
指令既生硬又危险,只能小心使用。或者,正如链接的手册文档所说

我们建议您尽量少用这些评论


希望有帮助。祝你好运

我建议:
(window | | global)['Date']
。是的,这是不雅观的…@Paleol我之所以回避它,不是因为它不优雅,而是因为它不可靠,而且在我身上起了反作用。根据匹配变量的优先级,如果浏览器环境具有
window.global
(用于填充某些节点内容或任何内容)或节点具有
global.window
到存根DOM,则它将失败。然后只需将
window['Date']
global['Date']
if exists and are objects。希望确保我没有遗漏lib定义中的某些内容。完全忘记了@ts ignore,是的,这似乎是最好的处理方法。谢谢
function foo() {
    //@ts-ignore: Cannot reassign to const Date    
    Date = bar();
}