TypeScript:为什么让print = console.log.bind(console)只在前面有导入的情况下才有效?

时间:2017-12-05 02:50:11

标签: typescript

我有点疑惑:

let print = console.log.bind(console)

不起作用(提供"无法重新声明块范围的变量' print'" ),但这非常有效:

import { readFileSync } from 'fs' //or even import { } from 'anything'
const print = console.log.bind(console)

更令人费解的是,使用变量的另一个名称(如" printIt")有效。

发生了什么?

1 个答案:

答案 0 :(得分:5)

根据顶级导入或导出语句的存在,文件中的顶级作用域的处理方式不同。 This is not a bug

  

具有一个顶级导入/导出的文件(例如,示例中为test.ts)被视为模块。模块有自己的范围,不与全局范围声明合并。

因此,只要您拥有顶级导入,print变量现在就在其自己的范围内,并且不会与dom type declarations中定义的全局print冲突(在浏览器环境中,有一个名为print()的顶级全局函数opens print current page dialog)。