【问题标题】:Mongoose + Typescript custom doc interface not workingMongoose + Typescript 自定义文档界面不起作用
【发布时间】:2021-01-28 06:49:38
【问题描述】:

我已经在 mongoose + typescript 上工作了一段时间了。 但是我在为我的架构创建 CustomDoc 界面 时遇到了这个问题。

错误

Typescript 没有验证从 mongoose 查询返回的文档,它显示类型 any

自定义文档界面

interface UserAttrs {
  name: string;
  email: string;
  password: string;
}

interface UserDoc extends mongoose.Document {  // <== here
  name: string;
  email: string;
  password: string;
  isAdmin: Boolean;
  createdAt: Date;
}

interface UserModel extends mongoose.Model<UserDoc> {
  build: (attrs: UserAttrs) => UserDoc;
}

const userSchema = new mongoose.Schema(
  {
    name: { type: String, required: true },
    email: { type: String, required: true, unique: true },
    password: { type: String, required: true },
    isAdmin: { type: Boolean, default: false },
    createdAt: { type: Date, default: Date.now() },
  }
);
userSchema.statics.build = (attrs: UserAttrs) => {
  return new User(attrs);
};

export const User = mongoose.model<UserDoc, UserModel>("User", userSchema);

错误/问题

根据我的理解,它的类型应该是UserDocundefined。 这就是为什么我在从用户文档中解构用户属性时无法验证的原因,这样使用 TS 毫无意义。

【问题讨论】:

    标签: node.js mongodb typescript mongoose


    【解决方案1】:

    试试这个:

    interface UserAttrs {
      name: string;
      email: string;
      password: string;
    }
    
    interface UserDoc extends UserAttrs, mongoose.Document {  
      isAdmin: Boolean;
      createdAt: Date;
    }
    
    
    const userSchema = new mongoose.Schema(
      {
        name: { type: String, required: true },
        email: { type: String, required: true, unique: true },
        password: { type: String, required: true },
        isAdmin: { type: Boolean, default: false },
        createdAt: { type: Date, default: Date.now() },
      }
    );
    userSchema.statics.build = (attrs: UserAttrs) => {
      return new User(attrs);
    };
    
    export const User = mongoose.model<UserDoc>("User", userSchema);
    

    【讨论】:

    • 遗憾的是它没有任何区别。 ://
    猜你喜欢
    • 1970-01-01
    • 2019-07-11
    • 2018-03-26
    • 1970-01-01
    • 2021-07-18
    • 2014-09-19
    • 2016-10-21
    • 2019-09-18
    • 2020-09-01
    相关资源
    最近更新 更多