TypeScript 中的 Mongoose 方法范围

Posted

技术标签:

【中文标题】TypeScript 中的 Mongoose 方法范围【英文标题】:Mongoose method scope in TypeScript 【发布时间】:2014-11-23 23:49:26 【问题描述】:

我对 Mongoose 方法的回调函数中的对象范围有疑问。 我的员工有“地址”。当您调用此“方法”时,它会在地址模型中查找地址。

javascript

employeeSchema.methods.getAddresses = function (callback)  
  addressModel.find( _id:  $in: this.addresses  , function (err, obj) 
    callback(obj);
  );
;

我想输入所有内容,但函数中的“this”范围存在问题。 范围在对象本身上,但是所有示例都显示“this”。这在 TypeScript 中不起作用,因为它认为它是主类。

打字稿:

employeeSchema.methods.getAddresses = (callback) =>  
  addressModel.find( _id:  $in: this.addresses  , (err, obj) => 
    callback(obj);
  );
;

我有同样的验证问题:

accountSchema.path('email').validate(function (email, callback) 
  if (this.isNew || this.isModified('email')) 

'This'是回调范围内的账户,但有没有办法将对象实际传递给回调?

【问题讨论】:

为什么不把地址作为参数传入你的方法呢? (地址,回调)...然后调用者将使用“this.addresses” 【参考方案1】:

由于您不想捕获词法范围的this,因此不要使用=>。只需使用function

有一个功能请求将this 的含义声明为特定类型:https://github.com/Microsoft/TypeScript/issues/229

【讨论】:

好吧,在那之前我将使用 function() 并将其转换为类型化对象。谢谢 只是一个提示:更喜欢术语assert 而不是cast,因为没有任何运行时支持

以上是关于TypeScript 中的 Mongoose 方法范围的主要内容,如果未能解决你的问题,请参考以下文章

使用 Typescript 在 Mongoose 中缺少子文档方法

使用 Typescript 在 Mongoose 中缺少子文档方法

Typescript & Mongoose - "this" 在实例方法中不可用

Node.js/Mongoose/MongoDb Typescript MapReduce - emit() 和 Array.sum() 方法

Node.js/Mongoose/MongoDb Typescript MapReduce - emit() 和 Array.sum() 方法

TypeScript 中的 Mongoose post hook 类型错误