【问题标题】:Mongoose method scope in TypeScriptTypeScript 中的 Mongoose 方法范围
【发布时间】: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”

标签: javascript node.js callback mongoose typescript


【解决方案1】:

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

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

【讨论】:

  • 好吧,在那之前我将使用 function() 并将其转换为类型化对象。谢谢
  • 只是一个提示:更喜欢术语assert 而不是cast,因为没有任何运行时支持
猜你喜欢
  • 2016-08-16
  • 1970-01-01
  • 2018-12-22
  • 2013-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-02
相关资源
最近更新 更多