網站搜尋

mongodb - NestJS + Mongoose 架構與自訂 TypeScript 類型


我正在嘗試使用 nestjs/mongoose 裝飾器,從以下類別創建一個 Mongo Schema:

@Schema()
export class Constraint {
  @Prop()
  reason: string;

  @Prop()
  status: Status;

  @Prop()
  time: number;
}

問題是 Status 定義如下:

export type Status = boolean | 'pending';

我無法弄清楚要傳給 status 的 prop 裝飾器什麼,因為我收到了以下錯誤:

Error: Cannot determine a type for the "Constraint.status" field (union/intersection/ambiguous type was used). Make sure your property is decorated with a "@Prop({ type: TYPE_HERE })" decorator

而 { type: Status } 不起作用,因為 Status 是一個 type,而不是一個 Class。

答案#1

我遇到同樣的問題,感謝 @sven-stam,正如他在這裡提到的,我這樣實現了 Mixed 類型:

import { Prop, Schema } from '@nestjs/mongoose';
import mongoose, {
  HydratedDocument,
  Schema as MongooseSchema,
} from 'mongoose';

export type UserDocument = HydratedDocument<User>;

@Schema()
class User {
  @Prop()
  username: string

  @Prop({default: false, type: MongooseSchema.Types.Mixed })
  paid: boolean | 'waiting'
}

答案#2

由於 status 可以是布林值或字串,所以它是一個混合型別。因此你可以考慮將你的型別設為 Mixed