如何在typescript回调函数中定义此变量的形状

时间:2014-12-01 21:41:26

标签: node.js mongodb mongoose typescript

我正在尝试将在nodejs上使用mongoose的现有项目转换为Typescript。但是,我在一些回调函数中遇到了定义这种形状的问题。 例如,我的用户对象被定义(严格限制以专注于该问题),如下所示:

export class UserAPI{
    userSchema: mongoose.Schema
    constructor(){
       this.userSchema = new mongoose.Schema({name: String,
                                       email: {type:String, lowercase: true}
                                       });
       this.userSchema.virtual('password').set(function(password: string){
           this._password = password;
       }).get(function(){
        return this._password;
        });
   }
}

上面的最后一行(返回this._password)会导致打字稿错误。据我了解,get和set回调函数的范围由mongoose设置。显然,打字稿在回调函数中不知道该对象的形状,并导致编译器错误。有人可以帮我理解如何克服这个错误吗?

1 个答案:

答案 0 :(得分:0)

  

显然,打字稿在回调函数中不知道该对象的形状,并导致编译器错误。

它不应该是编译错误,因为this被假定为类型any,除非你使用的是lambda(=>),你的情况并非如此代码示例。

定义此形状的最佳方法是执行var foo:SomeType = this之类的操作,然后使用foo代替this。理由:这是一个悬而未决的问题(https://github.com/Microsoft/TypeScript/issues/229)。