我正在尝试将在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设置。显然,打字稿在回调函数中不知道该对象的形状,并导致编译器错误。有人可以帮我理解如何克服这个错误吗?
答案 0 :(得分:0)
显然,打字稿在回调函数中不知道该对象的形状,并导致编译器错误。
它不应该是编译错误,因为this
被假定为类型any
,除非你使用的是lambda(=>
),你的情况并非如此代码示例。
定义此形状的最佳方法是执行var foo:SomeType = this
之类的操作,然后使用foo
代替this
。理由:这是一个悬而未决的问题(https://github.com/Microsoft/TypeScript/issues/229)。