打字稿:mongoose模式的静态方法

时间:2016-05-03 14:28:47

标签: node.js mongodb mongoose typescript

我试图用TypeScript实现一个mongoose模型,没什么特别的,只是试着让它工作。此代码编译但有警告:

import crypto = require('crypto')
import mongoose = require('mongoose')
mongoose.Promise = require('bluebird')
import {Schema} from 'mongoose'

const UserSchema = new Schema({
  name: String,
  email: {
    type: String,
    lowercase: true,
    required: true
  },
  role: {
    type: String,
    default: 'user'
  },
  password: {
    type: String,
    required: true
  },
provider: String,
  salt: String
});

/**
 * Methods
 */
UserSchema.methods = {
  // my static methods... like makeSalt, etc
};

export default mongoose.model('User', UserSchema);

但打字稿正在抱怨:

error TS2339: Property 'methods' does not exist on type 'Schema'.

我认为我需要扩展一些界面。有这个指针?

1 个答案:

答案 0 :(得分:0)

默认情况下,Schema类型不允许扩展。在打字稿中,接口是开放的并且是可扩展的。您需要扩展Schema的类型以包括您正在扩展的字段,否则打字稿不知道它。这是扩展类型的一个很好的答案。 How do you explicitly set a new property on `window` in TypeScript?

如果你看一下https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/mongoose/mongoose.d.ts,你会看到猫鼬的一般类型。

您最有可能做的是以下内容,但我不知道您是否可以扩展课程:

架构extended.d.ts

module "mongoose" {
   export class Schema {
       methods:any
   }
}

然后在你的代码中:

///<reference path="./schema-extended.d.ts" />
//Schema should now have methods as a property.
new Schema().methods