это не определено в классе typescript

#node.js #typescript #this

Вопрос:

Я пытаюсь понять, почему «это» иногда может быть неопределенным в классах, и как это исправить:

 import { UserDatabase } from './user.database';

export class UserService {
    private userDatabase = new UserDatabase();
    
    
    async login (request: Request, response: Response) {
        let {email, password} = request.body;
        
        const user = await this.userDatabase.login(email, password);
...
 

Журнал ошибок:

(node:3254) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'userDatabase' of undefined

Ответ №1:

Обычная проблема с тем this .

Вы можете привязать метод к контексту класса:

 export class UserService {
  constructor () {
    this.login = this.login.bind(this);
  }

  ...

}
 

Подробнее читайте здесь: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_objects/Function/bind