Расширить экспресс-запрос для пользовательского параметра паспорта - PullRequest
0 голосов
/ 21 мая 2018

Я использую Passport для обработки аутентификации с помощью приложения Express.Это устанавливает пользователя на экспресс-ответ.Я использую TypeScript, поэтому установка типа запроса на «Запрос» в определениях маршрута приведет к ошибке, поскольку пользовательский объект не существует в экспресс-запросе.Существует множество вопросов о расширении запроса, либо путем объявления слияния , либо расширения интерфейса , но они вызывают другую ошибку.Мой файл выглядит следующим образом:

import { Router, Request, Response }  from 'express'
import { User as CustomUser } from './user'

interface IRequest extends Request {
  user: CustomUser
}

const router: Router = Router()

router.get('/', requiresLogin, (req: IRequest, res: Response) => {
  console.log(req.user)
  res.sendStatus(204)
})

Но теперь я получаю следующий TypeScript для экспресс-обратного вызова:

Argument of type '(req: IRequest, res: Response) => void' is not assignable to parameter of type 'RequestHandlerParams'. Type '(req: IRequest, res: Response) => void' is not assignable to type '(RequestHandler | ErrorRequestHandler)[]'. Property 'includes' is missing in type '(req: IRequest, res: Response) => void'.

Я недавно обновился до TypeScript v2.8.3, иникогда не было проблемы ранее.

1 Ответ

0 голосов
/ 31 мая 2018

Это может произойти, если вам не удастся явно импортировать Request, Response или NextFunction из Express и использовать вместо этого встроенные узлы (которые имеют немного другую подпись).

Попробуйтедобавив следующее в ваше определение промежуточного программного обеспечения:

import {Request, Response, NextFunction} из 'express';

См. https://github.com/DefinitelyTyped/DefinitelyTyped/issues/26146#issuecomment-393386416

...