ошибка ts-check: свойство не существует для типа - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть база кода узла, и я хочу перенести ее в машинопись. Поэтому первое, что я сделал, это добавил // @ ts-check и исправил проблемы, которые имели машинопись. Я мог бы решить все вопросы, кроме этого.

Мне нужен ip-адрес клиента для занесения в черный список клиентов, которые отправляют слишком много избыточных запросов. Поэтому я использую промежуточное программное обеспечение ниже, чтобы добавить IP-адрес клиента к объекту запроса.

app.use((request, _, next) => {
    const ip = request.get('x-real-ip')
    if (ip) {
        Object.defineProperties(request, { clientIP: { value: ip, writable: false } })
    } else {
        Object.defineProperties(request, { clientIP: { value:request.socket.remoteAddress, writable: false } })
    }
    next()
})

Но когда я хочу получить доступ к свойству clientIP в другом месте, машинопись выдает ошибку ниже:

Свойство clientIP не существует для типа «Запрос».

Что я должен сделать, чтобы эта ошибка исчезла? Спасибо

1 Ответ

0 голосов
/ 15 сентября 2018

Вам потребуется дополнить интерфейс Request в модуле express-serve-static-core новым свойством.(Согласно типам, модуль express имеет интерфейс Request, который расширяет интерфейс на express-serve-static-core, но расширение этого не охватит все области применения.) Поместите следующее в файл .d.ts в вашем проекте:

declare module "dummy" {
    module "express-serve-static-core" {
        interface Request {
            clientIP: string;
        }
    }
}

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

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