typescript 无法导入枚举,除非我将其设置为const enum并将isolatedModules设置为false

cbwuti44  于 2023-01-31  发布在  TypeScript
关注(0)|答案(1)|浏览(258)

我有一个lerna monorepo设置与这些软件包:

  • @whatever/types-使用单个索引.ts文件:
export enum PetKind {
  Dog,
  Cat,
}

export type Pet = {
  kind: PetKind
}
  • @whatever/api-使用单个索引.ts文件:
import { Pet, PetKind } from '@whatever/types'

const pet: Pet = {
  kind: PetKind.Dog
}

它应该是一个Node.js应用程序,所以我

type: "module"

在其package.json中指定。
我可以编译@whatever/api,但当我运行编译脚本时,我得到这个错误:

import { PetKind } from '@whatever/types';
         ^^^^^^^ SyntaxError: Named export 'PetKind' not found.

经过一些尝试和错误,我意识到这种情况发生,因为我导入enum。iidoEe。如果我摆脱它,我停止得到错误。

// this works
import { Pet } from '@whatever/types'

const pet: Pet = {
  kind: 0
}

如果我用const enum替换enum(并在@whatever/api-s tsconfig.json中设置isolatedModules: false),我也不会收到错误。

// this works too
export const enum PetKind {
  Dog,
  Cat,
}

export type Pet = {
  kind: PetKind
}

我使用了以下tsconfig:

  • @无论什么/类型
{
  "compilerOptions": {
    "lib": ["esnext"],
    "types": [],
    "target": "es2020",
    "allowJs": true,
    "skipLibCheck": true,
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "strict": true,
    "forceConsistentCasingInFileNames": true,
    "module": "esnext",
    "moduleResolution": "node",
    "resolveJsonModule": true,
    "isolatedModules": true,
    "noEmit": false,
    "declaration": true,
    "rootDir": "./src",
    "outDir": "./build"
  },
  "include": ["./src"]
}
  • @whatever/API
{
  "compilerOptions": {
    "allowJs": true,
    "skipLibCheck": true,
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "strict": true,
    "forceConsistentCasingInFileNames": true,
    "resolveJsonModule": true,
    "noEmit": false,
    "declaration": true,
    "types": ["node"],
    "lib": ["esnext"],
    "target": "es2020",
    "module": "esnext",
    "moduleResolution": "node",
    "isolatedModules": true, // I change it to false when I try `const enum`-s
    "experimentalDecorators": true,
    "rootDir": "./src",
    "outDir": "./build",
    "typeRoots": ["@whatever/types"]
  },
  "include": ["./src"]
}

有什么我可以做的吗?我不想使用const enum没有真实的的原因。从我所能理解的一般不推荐,除非有一个要求,以减少捆绑大小,这不是我的情况。

**UPD:**我认为问题是我无法从我的@whatever/API导入任何发出的代码。我尝试从@whatever/types导出类,但在导入时遇到了同样的问题。

flvtvl50

flvtvl501#

正如UPD中提到的,enum-s和const enum-s与我的问题无关,问题是我无法导入任何从typescript发出的代码。
我可以通过添加以下内容来解决此问题

"type": "module"

@whatever/types的. json打包

相关问题