TypeScript编译器和Babel处理默认导出的方式有所不同。 例如:
import Button from 'grommet/components/Button'
console.log(Button)
如果通过undefined
进行编译,它将记录tsc
,但它与Babel一起使用。但是,如果我们这样做:
import * as Button from 'grommet/components/Button'
console.log(Button)
这在TS中为Button { ... }
,在Babel中为{ default: Button { ... } }
。
可以通过在编译器选项中引发标志esModuleInterop
来解决此差异。
顺便说一句,没有esModuleInterop
的其他方法是先使用tsc
进行编译,然后使用Babel进行编译,但这很慢,并且我们失去了热插拔功能。我们也可以像运行Imported = _Imported.default || _Imported
这样的运行时程序来修复它,但这容易出错,并且会增加维护负担。
问题是,esModuleInterop
是正确的解决方案吗?如果是这样,"esModuleInterop": false
是否有用例?
答案 0 :(得分:2)
问题是,esModuleInterop是否是正确的解决方案
是的。这正是它的设计目的。
如果是,那么“ esModuleInterop”是否有用例:false?
esModuleInterop: true
生成 more JavaScript,以使魔术工作像babel一样。如果您希望不对默认导出(如babel)进行魔术映射而导致轻微的性能提升,请不要使用该标志。