我是第一次使用SWC
,我只在使用SWC
编译器时遇到过这个错误。没有SWC
,一切都很好
错误
throw new TypeError(Invalid schema configuration: \
${瓦尔}不是
+ ^
TypeError:无效的架构配置:admin
不是路径ADMIN
上的有效类型。Blockquote
有效架构类型的序列号。
说明
我有一个User
模式,其中有一个名为role
的属性,它的类型是一个名为Role
的enum
。
enum
export enum Role {
ADMIN = 'admin',
SALES = 'sales',
MARKETING = 'marketing',
}
验证码
import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
import { Document } from 'mongoose';
import { Role } from '../../../enum/role';
@Schema({ timestamps: true })
export class User {
@Prop({ required: true, default: null })
email: string;
@Prop({ required: true, default: null })
password: string;
@Prop({ required: true, enum: Role, default: Role.ADMIN })
role: Role;
}
export const UserSchema = SchemaFactory.createForClass(User);
export type UserDocumnet = User & Document;
如果我删除Role
作为类型,错误就会消失,就像这样
@Prop({ required: true, enum: Role, default: Role.ADMIN })
role: string;
无论Role enum
中的index 0
处存在什么值,它都会抛出错误。例如,如果我在枚举中向上移动SALES
,它会显示sales
inside error
SWC配置
我安装了swc,
npm i --save-dev @swc/cli @swc/core
nest-json.json
{
"$schema": "https://json.schemastore.org/nest-cli",
"collection": "@nestjs/schematics",
"sourceRoot": "src",
"compilerOptions": {
"deleteOutDir": true,
"builder": "swc",
"typeCheck": true
}
}
2条答案
按热度按时间cyvaqqii1#
看起来这是使用SWC构建时NestJS v10中的一个bug。在使用nestjs包的v7或v8(没有SWC)时,我无法重现这个问题。
关于问题本身,它来自
@nestjs/mongoose
试图创建第二个模式(除了User
实体)。原始实体的模式采用以下形式:
但是在处理上面的模式时,
@nestjs/mongoose
尝试创建第二个模式,其形式为:根据https://mongoosejs.com/docs/guide.html#definition,这不是有效的mongoose架构。
因为这不是一个有效的模式,因此出现错误。
只有在使用SWC时才会弹出此问题。
uemypmqf2#
所以我在**@Robin托马斯的回答的帮助下找到了解决方案**。根据他的回答,当使用
SWC
时,@nestjs/mongoose
没有正确转换enum
。当我们使用TSC
comnpiler时,它可以正确转换enum
。现在这意味着它与SWC
如何处理enum
转换有关。所以我搜索了一下,发现SWC
不能很好地与外部enum
文件一起工作。不仅如此,SWC
不能很好地与auto imports
一起工作,如果你试图将一个ts file
调用到另一个ts file
中,如果你的导入是从src/etc/etc
开始的,SWC
抛出错误CAN NOT FIND MODULE xyz
。解决方案
我习惯把枚举文件放在一个单独的文件夹中,地址是
root of source or src
。**但特别是SWC
如果枚举是从另一个文件导入的,则不起作用。不过,当枚举在同一个文件中声明时,它会正确编译。您还必须从outisde导入文件,如
../etc/ect
和src/etc/etc
。将此讨论保留在ENUM部分https://github.com/swc-project/swc/issues/1160#issuecomment-738320066
将此讨论作为导入部分https://github.com/swc-project/swc/issues/7603#issuecomment-1692146920
我这么做了,成功了