使用“import type”声明导入时,TypeScript 枚举不能用作值

A.N*_*lam 9 import enums types typescript

版本信息

\n

TypeScript v4.1.3 Node.js v10.23.1 linux/amd64

\n\n

https://replit.com/@AnmSaiful/ts-import-type-enum

\n

代码

\n
// ---- enums.ts ----\nexport enum Sex {\n\n  Male    = "male",\n  Female  = "female",\n\n}\n\n// ---- type.ts ----\nexport * as Enum from "./enums";\n\n// ---- index.ts ----\nimport type { Enum } from "./type";\n\nfunction enumTest(): Enum.Sex {\n\n  return Enum.Sex.Male;\n\n}\n\nconsole.log( enumTest() );\n
Run Code Online (Sandbox Code Playgroud)\n

实际行为

\n

它不允许使用组合导入类型中的 Enum 并表示:

\n
\n

“Enum”不能用作值,因为它是使用“导入类型”导入的。

\n
\n

预期行为

\n

它应该允许使用导入类型中的枚举。

\n

sli*_*wp2 5

TS 3.8 添加仅类型导入和导出功能。

\n
\n

import type仅导入用于类型注释和声明的声明。它总是被完全擦除,因此在运行时\xe2\x80\x99s 没有任何残留。

\n
\n

只需像这样导入枚举:

\n
import { Enum } from \'./type\';\n
Run Code Online (Sandbox Code Playgroud)\n


Ami*_*Rai 2

刚刚在下面的链接中解决了您的问题 https://replit.com/@aMITrAI11/ts-import-type-enum#index.ts

  • 枚举.ts
export enum Sex {
  Male    = "male",
  Female  = "female",
}
Run Code Online (Sandbox Code Playgroud)
  • 类型.ts
export * as Enum from "./enums";
Run Code Online (Sandbox Code Playgroud)
  • 索引.ts
import { Enum } from "./type";

function enumTest() {
  return Enum.Sex.Male;
}

console.log(enumTest());
Run Code Online (Sandbox Code Playgroud)

  • 我使用“导入类型”来避免 ESLint 的“无循环”规则失败,因为我的类型导入是由循环依赖引起的。这是正常的,因为类型定义文件使用类文件(对于实例类型),而类文件使用类型定义文件。 (2认同)