我需要对以下理论进行确认。根据TS docs,可以在tsconfig.json中设置两个选项。
当我在Google上搜索时,我会看到两者都设置为true(至少就我要针对的行为而言)。但是,据我所知,文档,TS和向JS的转译都没有意义。
我认为,我可能只使用后者,而完全删除了前者。但是,由于谨慎而谦虚,我不能完全确定,担心我正在做一些不太明亮的事情,但现在还没有意识到。
我担心这是不适当的事情,稍后会在驴中咬我,造成数小时的哀叹和拔毛,同时还拼命地排除故障。怀疑的基础是两个选项均可用,因此我推断在四种情况下都需要所有组合(对/错等),但我无法想象它们是哪种。
如果在编译器选项中--esModuleInterop:true为真,跳过--allowSyntheticDefaultImports是否完全安全?如果是这样,为什么我们有这个选择呢?
额外的问题:这两个选项的全部四个组合(对/错)何时需要?
最佳答案
如果您是想让allowSyntheticDefaultImports
保持未定义状态,而仅定义esModuleInterop
,那么答案应该是“YES”,但这是有问题的。 PR #26866似乎是一种解决方法,仅在9月17日才合并,因此短期内可能会有一定风险。
由于两者都存在,我相信它们都是解决与Babel转换模块的导入有关的兼容性问题的一部分,原始PR在某些编译时消息中添加了allowSyntheticDefaultImports选项,但实际上并没有解决该问题的运行时行为。进口。因此,--esModuleInterop稍后添加。有关如何更新文档的讨论,请参见TypeScript-Handbook/#816。