我有点疑惑:
let print = console.log.bind(console)
不起作用(提供"无法重新声明块范围的变量' print'" ),但这非常有效:
import { readFileSync } from 'fs' //or even import { } from 'anything'
const print = console.log.bind(console)
更令人费解的是,使用变量的另一个名称(如" printIt")有效。
发生了什么?
答案 0 :(得分:5)
根据顶级导入或导出语句的存在,文件中的顶级作用域的处理方式不同。 This is not a bug:
具有一个顶级导入/导出的文件(例如,示例中为test.ts)被视为模块。模块有自己的范围,不与全局范围声明合并。
因此,只要您拥有顶级导入,print
变量现在就在其自己的范围内,并且不会与dom type declarations中定义的全局print
冲突(在浏览器环境中,有一个名为print()
的顶级全局函数opens print current page dialog)。