gpt4 book ai didi

typescript - 为什么 `const enum` 允许 `isolatedModules` ?

转载 作者:行者123 更新时间:2023-12-04 11:12:43 29 4
gpt4 key购买 nike

declare const enum {
UP,
DOWN,
}`
--isolatedModules 时不允许使用了编译器选项。
error TS1209: Ambient const enums are not allowed when the '--isolatedModules' flag is provided.

我对 --isolatedModules的理解是它告诉编译器进行额外检查以确保单独编译(例如使用 transpileModule )是安全的。

那么为什么是 const enum (没有 declare )允许吗?单独编译不是不安全吗?也就是说,如果 foo.ts导入并使用 const enum来自 bar.ts ,怎么可能 ts.transpileModule知道如何正确转换枚举用法吗?

最佳答案

如果您使用其他转译器来编译您的代码,例如 babel,那么该转译器只能与在同一模块文件中声明的 typescript 一起使用。如果您在使用它的同一个模块中声明您的 const 枚举,那么这不是问题。当您想将枚举公开给其他模块时,问题就开始了。

例如,如果您正在编写枚举:

const enum Animal {
DOG,
CAT
}

到目前为止,如果您只在声明它的同一源文件中使用此代码,这不是问题:
Animal.DOG // Will be replaced with 0.

但是你想在另一个源文件中使用Animal.DOG的图像。在独立模块的基础上进行转译编译:
  • 编译器读取 typescript 模块。
  • 模块的类型信息被剥离。
  • 剩下的是编译器编写的 JavaScript 模块。

  • 所以如果它没有在同一个模块上声明,就不可能知道什么是 Animal.DOG。这就是该标志首先被称为 --isolatedModules 的原因。此标志正在检查和报告在这种情况下不起作用的任何 typescript 使用。

    如果您正在编写一个库,那么不要导出 const 枚举,因为如果您的用户使用 babel 而不是 tsc 来编译他们的代码,他们将无法使用它们。

    关于typescript - 为什么 `const enum` 允许 `isolatedModules` ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56854964/

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