我有一个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
导出类,但在导入时遇到了同样的问题。
1条答案
按热度按时间flvtvl501#
正如UPD中提到的,
enum
-s和const enum
-s与我的问题无关,问题是我无法导入任何从typescript发出的代码。我可以通过添加以下内容来解决此问题
将
@whatever/types
的. json打包