使用带有mongoose模式的TypeScript枚举

我有一个枚举模式:

export interface IGameMapModel extends IGameMap, Document {} export const gameMapSchema: Schema = new Schema({ name: { type: String, index: { unique: true }, required: true }, type: { type: String, enum: CUtility.enumToArray(GameMode) } }); export const GameMap: Model<IGameMapModel> = model<IGameMapModel>('GameMap', gameMapSchema); 

GameMap是一个枚举。

第一个问题已经在这里:我需要将枚举转换为string数组,以便与模式一起使用。

其次,我想在模式创build期间直接使用枚举值。

 new GameMap({ name: 'Test', type: GameMode.ASSAULT }); 

返回ValidationError: type: '1' is not a valid enum value for path 'type'.

我不确定这是否可以实际工作,因为我在模型枚举属性中设置的string数组。

我的想法是在模式创build过程中创build某种types的转换。 这是否与mongoose一起工作,还是需要创build一些帮助器来创build对象?

GameMode.ASSAULT正在评估它的数值,但是GameMode期望types是一个string。 你期待string评估是什么? 如果你需要枚举的string值,你可以通过GameMode[GameMode.ASSAULT]来访问它,它会以string的forms返回ASSAULT

例如:

 enum TEST { test1 = 1, test2 = 2 } console.log(TEST[TEST.test1]); //Prints "test1" 

从validation的Mongoose文档中 ,在具有enumvalidation的String type的模式属性中,mongoose需要的enum typeString数组。

这意味着CUtility.enumToArray(GameMode)需要返回一个索引数组作为string,或者是一个enum文本/string值的数组 – 无论您希望存储在数据库中。

validation错误似乎暗示1不在由CUtility.enumToArray(GameMode)生成的数组中,或者当预期string表示forms为1时,validation将GameMode.ASSAULT视为一个数字。 您可能必须将传入的enum值转换为string。

CUtility.enumToArray(GameMode)的输出是什么? 这应该帮助你确定哪一个是你的问题。

Interesting Posts