gpt4 book ai didi

node.js - typescript : Mongoose 模式的静态方法

转载 作者:可可西里 更新时间:2023-11-01 09:54:48 25 4
gpt4 key购买 nike

我正在尝试使用 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);

但是 typescript 在提示:

错误 TS2339:类型“Schema”上不存在属性“方法”。

我想我需要扩展一些接口(interface)。有什么建议吗?

最佳答案

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

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

虽然我不知道您是否可以扩展类,但您最有可能希望做的是以下操作:

schema-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

关于node.js - typescript : Mongoose 模式的静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37006974/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com