构造函数中的私有字段不会为null,但在方法中将为null,typescript

时间:2016-05-19 19:24:30

标签: node.js mongodb express mongoose typescript

here is my source code

当我用 ControllerBase.ts 调用api/cateogry/:id时出错了 在findById方法中,this._service为空。但在构造函数中,this._service不为null。我可以告诉发生了什么,我不知道如何解决它。 请帮帮我!

2 个答案:

答案 0 :(得分:0)

在直接调用函数而不是在类对象上执行函数时,有时会忽略Typescript' this处理。而不是传递

this._controller.findById` 

到您的路由器尝试传递

this._controller.findById.bind(this)

答案 1 :(得分:0)

@Paarth感谢小费。我是stackoverflow的新手。我不知道它是如何工作的,但下次我会被注意到。 这是我的代码sameples:

class RepositoryBase<T extends IEnityModel> {

private _model: mongoose.Model<mongoose.Document>;

constructor(schemaModel: mongoose.Model<mongoose.Document>) {
    this._model = schemaModel;
}

create(item: T, callback: (error: any, result: any) => void) {
    this._model.create(item, callback);

}

retrieve(callback: (error: any, result: any) => void) {
    this._model.find({}, callback)
}

update(id: string, item: T, callback: (error: any, result: any) => void) {
    this._model.update({ _id: this.toObjectId(id) }, item, callback);

}

remove(id: string, callback: (error: any, result: any) => void) {
    this._model.remove({ _id: this.toObjectId(id) }, (err) => callback(err, null));
}

findById(id: string, callback: (error: any, result: T) => void) {
    this._model.findById(id, callback);
}


private toObjectId(id: string): mongoose.Types.ObjectId {
    return new mongoose.Types.ObjectId(id)
}

}

你可以看到_model是私有的,而且CategoryRepository类扩展了RepositoryBase,不知何故我想要在CategoryRepository中访问_model,所以我将private更改为protected,但是它会导致如下错误: typescript protected error info

对我来说这很奇怪。