如何使用类和接口使用DefiniteTyped在Typescript中编写类型化模型和模式.

import mongoose = require("mongoose");

 //how can I use a class for the schema and model so I can new up
export interface IUser extends mongoose.Document {
name: String;
}

export class UserSchema{
name: String;
}




var userSchema = new mongoose.Schema({
name: String
});
export var User = mongoose.model<IUser>('user', userSchema);

推荐答案

我就是这样做的:

  1. 定义TypeScript class,它将定义我们的逻辑.
  2. 定义interface(我将其命名为文档):这是mongoose将与之交互的类型
  3. 定义模型(我们将能够找到、插入、更新……)

代码:

import { Document, Schema, model } from 'mongoose'

// 1) CLASS
export class User {
  name: string
  mail: string

  constructor(data: {
    mail: string
    name: string
  }) {
    this.mail = data.mail
    this.name = data.name
  }
  
  /* any method would be defined here*/
  foo(): string {
     return this.name.toUpperCase() // whatever
  }
}

// no necessary to export the schema (keep it private to the module)
var schema = new Schema({
  mail: { required: true, type: String },
  name: { required: false, type: String }
})
// register each method at schema
schema.method('foo', User.prototype.foo)

// 2) Document
export interface UserDocument extends User, Document { }

// 3) MODEL
export const Users = model<UserDocument>('User', schema)

我怎么用这个?假设代码存储在user.ts中,现在您可以执行以下操作:

import { User, UserDocument, Users } from 'user'

let myUser = new User({ name: 'a', mail: 'aaa@aaa.com' })
Users.create(myUser, (err: any, doc: UserDocument) => {
   if (err) { ... }
   console.log(doc._id) // id at DB
   console.log(doc.name) // a
   doc.foo() // works :)
})

Mongodb相关问答推荐

我可以在BSON中使用代理字段吗?

发布到 MongoDB 时生成的附加id字段

Mongo按最大分组排序

对对象数组进行分组并在 mongodb 中获取计数

在延迟函数中重用 context.WithTimeout

在 Mongo 聚合中,可以通过分组生成 3 个不同的计数

在运算符 $map 中嵌入运算符 $exists

Mongodb按值分组并计算出现次数

无法提取地理键,经度/纬度超出范围

MongoDB 聚合 $divide 计算字段

Clojure 和 NoSQL 数据库

Mongoose 中不同集合的相同模式

在 URL 中使用 ID(来自 mongo 的 ObjectId)是否安全?

有没有办法为 mongoose.js 聚合提供 allowDiskUse 选项?

Node + Mongoose:获取最后插入的 ID?

Mongoose.js:嵌套属性的原子更新?

MongoDB 嵌套 OR/AND 在哪里?

如何使用 mgo 和 Go 查询 MongoDB 的日期范围?

插入违反唯一索引的 MongoDB 文档时如何捕获错误?

将新值推送到 mongodb 内部数组 - mongodb/php