#typescript
Вопрос:
Я знаю, что можно расширить интерфейс из другого модуля в машинописном виде, как это:
declare global {
// eslint-disable-next-line @typescript-eslint/no-namespace
namespace Express {
export interface Request {
readonly foo: string;
}
}
}
Мне интересно, возможно ли то же самое с функциями, которые уже существуют в дополняемом типе.
Например, интерфейс express Request
(который уже был изменен в предыдущем примере) также содержит функцию — член header()
. Эта функция имеет один string
параметр. Но есть и другая перегрузка, которая принимает этот тип set-cookie
. Можно ли добавить еще одну перегрузку для этой функции, например , с типом Authorization
, вроде этого:
declare global {
// eslint-disable-next-line @typescript-eslint/no-namespace
namespace Express {
export interface Request {
header(name: 'Authorization'): string | undefined;
}
}
}
Обратите внимание, что этот пример не работает (иначе этот вопрос был бы несколько бессмысленным). Кроме того, я очень хорошо понимаю , что в настоящее время уже можно вызвать функцию header()
с аргументом 'Authorization'
, но разработчикам было бы немного приятнее, если бы VS-код показывал их 'Authorization'
в поле автозаполнения.
Комментарии:
1. попробуйте
header<T extends 'Authorization'>(name: T): string | undefined;
и, пожалуйста, дайте мне знать, если это поможет2. Нет, к сожалению, это не сработало.