我正在尝试使用带有打字稿的猫鼬虚拟眼镜。而且无法使其工作。我在代码中收到与此相关的错误。我检查了许多参考,但找不到使这项工作可用的参考。
“ [ts]包含的箭头函数捕获隐含类型为'any'的'this'的全局值。[7041]”
export const UserSchema = new Schema({
firstName: {
type: String
},
lastName: {
type: String
},
roleId: {
alias: "group",
type: String
}
}, {
toJSON: {
transform: (doc, ret, options) => {
delete ret.id ;
delete ret.roleId ;
return ret ;
},
virtuals: true,
}
});
UserSchema.virtual("username").get(() => {
return this.firstName + " " + this.lastName ;
}) ;
我希望有一个新属性“ username”,它结合了“ firstName lastName”的值
替代代码,但有相同的错误-
UserSchema.virtual("username").get(function() {
return this.firstName + " " + this.lastName ;
}) ;
答案 0 :(得分:3)
定义上的箭头功能从声明上下文中捕获this
。由于您直接在模块中定义函数,因此它将是全局对象。
您要常规功能。常规函数在调用对象时将this
作为调用它的实际对象传递给它。
您还需要为this
添加类型注释(取决于严格的设置,但是您提到您尝试了常规函数,因此可能是问题所在),或者是this: any
或更特定于告诉打字稿您没有误访问this
UserSchema.virtual("username").get(function(this: { firstName: string, lastName: string}) {
return this.firstName + " " + this.lastName ;
}) ;
答案 1 :(得分:1)
我们还可以创建一个用户界面并使其像这样:
IUser extends mongoose.Document{
firstname:string,
lastname:string
}
UserSchema.virtual("username").get(function(this:IUser) {
return this.firstName + " " + this.lastName ;
}) ;