gpt4 book ai didi

javascript - 如果 esModuleInterop 为 true 配置 TypeScript 转译,我是否需要显式 allowSyntheticDefaultImports?

转载 作者:可可西里 更新时间:2023-11-01 02:23:58 27 4
gpt4 key购买 nike

我需要确认以下理论。根据TS docs ,有两个选项可以在 tsconfig.json 中设置。

  1. --allowSyntheticDefaultImports: 允许从没有默认导出的模块中进行默认导入。这不会影响代码发出,只会影响类型检查。

  2. --esModuleInterop:发出 __importStar 和 __importDefault 助手以实现运行时 babel 生态系统兼容性并启用 --allowSyntheticDefaultImports 以实现类型系统兼容性。

当我四处搜索时,我看到两者都设置为 true(至少就我的目标行为而言)。然而,就我对文档、TS 和 JS 的理解而言,同时使用它们是没有意义的。

我认为,我可能只使用后者而完全删除前者。然而,出于谨慎和谦虚的考虑,我不确定并担心我现在正在做一些不那么光明的事情而没有意识到。

我担心这是一些不合适的东西,稍后会咬我的驴子,导致数小时的哀叹和拔头发,同时拼命解决问题。怀疑的基础是两种选择都可用,所以我推断有四种情况需要所有组合(true/false 等),但我无法想象它们是哪种是。

如果 --esModuleInterop: truecompilerOptions 中跳过 --allowSyntheticDefaultImports 是否完全安全?如果是这样,为什么我们有这个选择?

奖金问题:这两个选项的所有四种组合(true/false)什么时候需要?

最佳答案

如果您的意思是您可以保留 allowSyntheticDefaultImports 未定义并仅定义 esModuleInterop,那么答案应该是肯定的,但这个问题一直存在。 PR #26866好像是修好了,9月17号才合并,所以短期内可能会有一些风险。

为什么两者都存在,我相信它们都是解决导入 Babel 转译模块的兼容性问题的一部分,原始 PR 为某些编译时消息添加了 allowSyntheticDefaultImports 选项,但实际上并没有解决运行时问题进口行为。所以后来添加了--esModuleInterop。参见 TypeScript-Handbook/#816用于讨论如何更新文档...

关于javascript - 如果 esModuleInterop 为 true 配置 TypeScript 转译,我是否需要显式 allowSyntheticDefaultImports?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52576203/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com