Тип возврата для экспресс-маршрутов с помощью TypeScript - PullRequest
0 голосов
/ 09 февраля 2019

Я пытаюсь использовать TypeScript в полной мере, поэтому я избегаю any, если это возможно.

Я видел экспресс-маршруты, определенные так:

import { Request, Response } from "express";

myRouter.route("/foo").post((req: Request, res: Response): Response => {
  return res.send("Hello World");
});

Этоработает, потому что send() возвращает экспресс Response.

Но если я сделаю перенаправление:

myRouter.route("/bar").post((req: Request, res: Response): Response => {
  return res.redirect("/baz");         // redirect() returns void!
});

Это не скомпилируется, потому что redirect() возвращает void, а не Response.

Опции:

  • Простое решение - вернуть маршрут any, но я хочу избежать этого, если это возможно
  • Я видел кодэто делает as unknown as Response, но это похоже на хак

Как правильно объявить типы возвращаемых маршрутов, не используя any?

1 Ответ

0 голосов
/ 09 февраля 2019

Согласно комментариям @ jfriend, объявление обратного вызова для RequestHandler :

(req: Request, res: Response, next: NextFunction): any;

Так что использование any в этом случае вполне нормально.

Однако,объявление его как void может быть даже лучше, так как Express не ожидает возвращаемого значения.Это то, что я делаю, и я считаю, что вводимые здесь слова являются «неправильными» (если дело обстоит не так, и есть допустимый вариант использования, пожалуйста, дайте мне знать).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...