расширить express тип ответа и экспортировать мой новый тип в качестве нового модуля - PullRequest
0 голосов
/ 25 февраля 2020

Я пытаюсь создать новый «общий» модуль для моей команды. одна из вещей, которую он должен включить, - это расширение объекта ответа и запроса (express).

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

Второе - мы хотели бы создать соглашение о том, как мы возвращаем ошибку, поэтому я хочу расширить тип ответа express, чтобы есть метод с именем sendError, который получит исключение / erormsg и создаст ответ. => Я хочу сделать больше, чем просто расширить интерфейс, я хочу дать ему значение.

До сих пор я создал новый модуль, в нем я создал файл types.d.ts и добавил это файл в мои "типы" в tsconfig.

import {User} from '../models/user.ts'
declare module 'express'{
    export interface Request {
user: User;
}
}

в моем moudle, я вижу подходящего пользователя для запроса, и все прекрасно работает. проблема в том, что когда наш сервис устанавливает этот модуль с npm, он не знаком с этим свойством.

Второй вопрос, как мне выполнить мой второй трагет? это больше расширение интерфейса, это больше похоже на расширение класса, потому что я хочу дать заключение

Я думал о чем-то таком:

import {User} from '../models/user.ts'
declare module 'express'{
    export interface Response {
sendError: (statusCode : number, error :Error ) => void;
}
}

express.Response.sendError = //put the logic here 

1 Ответ

1 голос
/ 25 февраля 2020

Почему бы просто не расширить пространство имен? Вот что у меня работает:

У меня вообще есть файл <project-root>/types/express.d.ts. В вашем случае содержимое будет:

import {User} from '../models/user.ts'
declare namespace Express{
  export interface Request {
    user: User
  }

  export interface Response {
    sendError: (statusCode : number, error :Error ) => void;
  }
}

Проверьте express Определенно Тип , чтобы понять больше

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