Я попытался перенести код моего экспресс-сервера с js на машинопись и столкнулся с проблемами при попытке доступа к полям, которые я добавил к объекту запроса в моих собственных функциях промежуточного программного обеспечения.
Например, я делаю что-то вроде этого:
app.use((req, res, next) => {
let account = checkAuthentication(req);
if(account) {
req.authenticated = true;
req.account = account;
next();
}
});
Теперь я хочу получить доступ к этим свойствам позже в других моих функциях промежуточного программного обеспечения, но файл .d.ts из @ types / express определенно определяет объект req для всех функций промежуточного программного обеспечения.
Теперь я нашел два способа справиться с этим, но оба кажутся плохими:
- Используйте typeguard в каждой функции промежуточного программного обеспечения. Но затем я добавляю бесполезный код в вывод js, потому что мои маршруты настроены таким образом, чтобы я знал во время «компиляции», какую форму мой объект req имеет в каждой функции промежуточного программного обеспечения.
- Используйте утверждение типа в каждой функции промежуточного программного обеспечения. Но тогда я не получаю преимуществ от typcript, несмотря на написание своего кода, чтобы все типы были известны во время компиляции, потому что тогда я в основном отключаю проверку типов для объекта req.
Итак, мой вопрос: как, если вообще, я могу использовать проверку типов в этом сценарии? Если я не могу, значит ли это, что такая структура, как express, невозможна в статически типизированном языке (например, C #)?