Kon*_*ten 14 javascript typescript webpack-4 typescript3.0
我需要对以下理论进行确认。根据TS文档,可以在tsconfig.json中设置两个选项。
--allowSyntheticDefaultImports:允许从模块进行默认导入,而没有默认导出。这不影响代码发出,仅影响类型检查。
--esModuleInterop:发出__importStar和__importDefault帮助程序以实现运行时babel生态系统兼容性,并启用--allowSyntheticDefaultImports以实现类型系统兼容性。
当我四处搜寻时,我会看到两者都设置为true(至少就我要针对的行为而言)。但是,据我所知,文档,TS和对JS的转换都没有意义。
我认为,我可能只使用后者,而完全删除了前者。但是,由于谨慎而谦虚,我不能完全确定,并且担心我正在做一些不太明亮的事情,但现在还没有意识到。
我担心这是不适当的事情,稍后会在驴上咬我,造成数小时的哀叹和拔毛,同时还拼命地排除故障。怀疑的基础是两个选项均可用,因此我推断在四种情况下都需要所有组合(对/错等),但我无法想象它们是哪种。
它是完全安全的跳过--allowSyntheticDefaultImports如果--esModuleInterop:真正的compilerOptions?如果是这样,为什么我们有这个选择呢?
额外的问题:这两个选项的四个组合(true / false)什么时候需要?
Bur*_*ris 10
如果您的意思是可以保留allowSyntheticDefaultImports未定义且仅定义的内容esModuleInterop,那么答案应该是“是”,但这存在问题。 PR#26866似乎是一个解决办法,仅在9月17日合并,因此短期内可能会有一定风险。
由于两者都存在,我相信它们都是解决与Babel转换模块的导入有关的兼容性问题的一部分,原始PR在某些编译时消息中添加了allowSyntheticDefaultImports选项,但实际上并没有解决该问题的运行时行为。进口。因此,--esModuleInterop稍后添加。有关如何更新文档的讨论,请参见TypeScript-Handbook /#816。
小智 8
好吧,我的理解是,allowSyntheticDefaultImports如果您的目标是 es6+(在开发时间),esModuleInterop则能够以更简单的方式加载 CommonJS 库,而如果您的目标是 AMD(就像我一样),则是为了简化这些导入(在运行时)。
根据文档,您不需要allowSyntheticDefaultImports明确指定是否已esModuleInterop启用,但我还必须启用的原因allowSyntheticDefaultImports是 Resharper 在 Visual Studio 中进行语法检查时似乎会查看该标志。当然它只用 就可以构建并正常工作esModuleInterop,但是我从 Resharper 收到了很多红色警告,直到我也启用了另一个标志。
| 归档时间: |
|
| 查看次数: |
8146 次 |
| 最近记录: |