出现这个错误的原因是:
fs模块没有默认导出
。事实上,fs模块的确没有默认导出
。因为fs是遵循cjs规范写的。即类似于这种导出:
module.exports = fs = {
readFile,
readFileSync,
...
}
而如果直接使用
import fs from 'fs'
就会导致出现标题中的错误(TS编译情况下)。
固导包的时候需要使用如下的方法:
import * as fs from 'fs'
看起来有些麻烦,事实上,如果尝试使用babel进行编译(不是tsc),就不会出现这个问题。因为babel会特殊处理这种情况。其实typescriot可以实现和babel一样效果。但默认typescript可能未开启的这个功能的。此时只需要设置开启即可
{
"compilerOptions": {
"esModuleInterop": true
}
}
值得注意的,开启之后会改变默认导包的方式,项目中所有的默认导入都会受到影响。
更多深入理解和源码解读,可以参考这里