使用带有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文档中 ,在具有enum
validation的String
type
的模式属性中,mongoose需要的enum
type
是String
数组。
这意味着CUtility.enumToArray(GameMode)
需要返回一个索引数组作为string,或者是一个enum
文本/string值的数组 – 无论您希望存储在数据库中。
validation错误似乎暗示1
不在由CUtility.enumToArray(GameMode)
生成的数组中,或者当预期string表示forms为1
时,validation将GameMode.ASSAULT
视为一个数字。 您可能必须将传入的enum
值转换为string。
CUtility.enumToArray(GameMode)
的输出是什么? 这应该帮助你确定哪一个是你的问题。