mongoose virtuals with typescript error - 包含箭头函数捕获“this”的全局值,该值隐含类型为“any”

Posted

技术标签:

【中文标题】mongoose virtuals with typescript error - 包含箭头函数捕获“this”的全局值,该值隐含类型为“any”【英文标题】:mongoose virtuals with typescript error - The containing arrow function captures the global value of 'this' which implicitly has type 'any' 【发布时间】:2019-06-24 00:31:04 【问题描述】:

我正在尝试使用带有 typescript 的 mongoose virtuals。并且无法使其工作。我收到与在代码中使用它相关的错误。我检查了许多参考资料,但找不到参考资料来完成这项工作。

"[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 ;
) ;

【问题讨论】:

this 的引用不能绑定在箭头函数中,它总是指向全局范围。如果您需要 this 来引用其他内容,请不要使用箭头函数。 【参考方案1】:

根据定义,箭头函数从声明上下文中捕获this。由于您直接在模块中定义函数,这将是全局对象。

你想要一个常规的函数。一个常规函数,当在一个对象上调用时,会将this 作为调用它的实际对象传递给它。

您还需要为 this 添加类型注释(取决于您的严格设置,但您提到您尝试了常规功能,因此这可能是问题所在),this: any 或更具体的东西来告诉您所做的打字稿不会误访问this

UserSchema.virtual("username").get(function(this:  firstName: string, lastName: string) 
  return this.firstName + " " + this.lastName ;
) ;

【讨论】:

【参考方案2】:

我们还可以创建一个用户界面并使其成为这样:

IUser extends mongoose.Document
firstname:string,
lastname:string


UserSchema.virtual("username").get(function(this:IUser) 
  return this.firstName + " " + this.lastName ;
) ;

【讨论】:

以上是关于mongoose virtuals with typescript error - 包含箭头函数捕获“this”的全局值,该值隐含类型为“any”的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB Aggregate 中的 Mongoose Virtuals

为啥 Virtual Populate 不能在 Node js 和 mongoose 上运行?场景:产品和用户评论

MongoDB / Mongoose 时间戳未更新

[React] Create an Auto Resizing Virtualized List with react-virtualized

[Python] Manage Dependencies with Python Virtual Environments

React Virtualized MultiGrid with Infinite Loader