如何在打字稿中的猫鼬userschema.methods中使用“this”
Posted
技术标签:
【中文标题】如何在打字稿中的猫鼬userschema.methods中使用“this”【英文标题】:how to use "this" inside mongoose userschema.methods in typescript 【发布时间】:2021-04-18 05:17:40 【问题描述】:我正在使用带有 typescript 和 jsonwebtoken 的猫鼬来创建登录 api。我是打字稿的新手。在 user.model 中,我无法使用“this”方法访问任何架构属性。例如,user.methods 给我一个编译错误“'Document'.ts(2339) 类型上不存在属性'tokens'”。
export interface IUser extends Document
name:string,
email: string;
password: string;
tokens: token: string[],
encryptPassword(password:string): Promise<string>;
validatePassword(password:String): Promise<boolean>;
const userSchema = new Schema(
name:
type: String,
required: true,
trim: true
,
email:
type: String,
unique: true,
required: true
,
password:
type:String,
required: true,
minlength: 5,
trim: true
,
tokens: [
token:
type: String,
required: true
]
)
userSchema.methods.generateAuthToken = async function ()
const user = this
const token = jwt.sign(_id: user._id.toString() , "thisismysecretkey")
user.tokens = this.tokens.concat(token)
在 userSchema.generateAuthToken 中,当我使用 user.tokens 或 this.tokens 时,我得到的属性 'tokens' 不存在于类型 'Document' 上。请告诉我我做错了什么。提前致谢
【问题讨论】:
【参考方案1】:尝试提供明确的this
参数。欲了解更多信息,请参阅this parameters
import Schema, Document from 'mongoose';
export interface IUser extends Document
name: string;
email: string;
password: string;
tokens: token: string [];
encryptPassword(password: string): Promise<string>;
validatePassword(password: String): Promise<boolean>;
const userSchema = new Schema(
name:
type: String,
required: true,
trim: true,
,
email:
type: String,
unique: true,
required: true,
,
password:
type: String,
required: true,
minlength: 5,
trim: true,
,
tokens: [
token:
type: String,
required: true,
,
,
],
);
userSchema.methods.generateAuthToken = async function (this: IUser)
const user = this;
const token = user._id.toString() + 'thisismysecretkey';
user.tokens = this.tokens.concat( token );
;
软件包版本:
"mongoose": "^5.11.9",
"typescript": "^3.7.2"
【讨论】:
以上是关于如何在打字稿中的猫鼬userschema.methods中使用“this”的主要内容,如果未能解决你的问题,请参考以下文章