我试图用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'.
我认为我需要扩展一些界面。有这个指针?
答案 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