Typcript: метод может быть статическим

typescript v 2.1.0

Я написал следующий ServerRouter.ts

import {Router, Request, Response, NextFunction} from 'express';

export class ServerRouter {
  router: Router;

  /**
   * Initialize the ServerRouter
   */
  constructor() {
    this.router = Router();
    this.init();
  }

  /**
   * GET index page
   */
  public  getIndex(req: Request, res: Response, next: NextFunction) {
    res.render('index');
  }

  /**
   * Take each handler, and attach to one of the Express.Router's
   * endpoints.
   */
  init() {
    this.router.get('/', this.getIndex);
  }

}

// Create the ServerRouter, and export its configured Express.Router
const serverRouter = new ServerRouter().router;
export default serverRouter;

Предупреждение об инспекции Webstorm

> Метод может быть статическим

о функции getIndex():

НО

Если бы я изменил его на статический

public static getIndex()

я получаю сообщение об ошибке: TS2339 'getIndex' не существует в типе 'ServerRouter'

Что я должен изменить?

спасибо за отзыв

Ответ 1

Статический метод существует для класса, а не для экземпляра объекта. Вам нужно будет изменить this.getIndex на ServerRouter.getIndex в вашей функции init.

WebStorm предлагает сделать статические методы, если они не касаются какого-либо состояния экземпляра, поскольку он предполагает, что метод существует на уровне, который является общим для всех экземпляров этого класса.

Вы можете узнать больше о static в Справочнике по TypeScript (см. Раздел "Статические свойства").