Я хотел бы добавить некоторое свойство "context" в интерфейс запроса Express, чтобы при написании промежуточного программного обеспечения я мог сделать что-то вроде:
const myMiddleware = (req: Request, res: Response, next: NextFunction) => {
req.context.something = 'something'
next()
}
Сообщение об ошибке, конечно же, сейчас
Свойство 'context' не существует в типе 'Request'.
Я знаю, что мне нужно выполнить объединение sh объявлений, но не могу понять, что я ' Я делаю неправильно. Я видел некоторые ответы, которые предлагают добавить это в файл .d.ts, поэтому я добавил файл custom.d.ts с этим
export {}
declare global {
namespace Express {
interface Request {
context?: any
}
}
}
Мне пришлось добавить export {}
, чтобы избежать этой ошибки, но свойство context
все еще не может быть найдено.
Аугментации для глобальной области видимости могут быть непосредственно вложены только во внешние модули или объявления окружающих модулей.
Я вижу много решений, предлагающих мне просто расширить интерфейс запроса, но я не хочу этого делать, потому что я хотел бы продолжать использовать тот же интерфейс запроса.
Некоторые решения говорят, что вам нужно добавить typeRoots
или files
свойство tsconfig. json с людьми, которые говорят, что они получают смешанные результаты, и это не решает мою проблему.
Я также видел предложение использовать модуль express-serve-static-core
, который похоже, тоже не работает
declare module 'express-serve-static-core' {
interface Request {
context?: any
}
}
Я знаю, что этот вопрос задавался много раз, но ни один из них не работает для меня, поэтому я думаю, что я делаю что-то не так.
Вот моя файловая структура:
tsconfig.json
src/
custom.d.ts
some_folder/
some_file_that_needs_req.context
и мой цконфиг. json:
{
"compilerOptions": {
"outDir": "./dist/",
"sourceMap": true,
"noImplicitAny": true,
"module": "commonjs",
"target": "es6",
"allowJs": true
}
}