отказ от ответственности: Я все еще немного неясен относительно дисперсии в целом ...
Моя ситуация такова:
// index.ts
import express from 'express';
import {Request, Response} from 'express';
const app = express();
app.use(handler);
interface BetterRequest extends Request {
foo: string;
}
function handler(req: BetterRequest, res: Response) {
req.foo = 'bar';
}
// tsconfig.json
{
"compilerOptions": {
"target": "es6",
"module": "commonjs",
"strict": true,
"allowSyntheticDefaultImports": true,
"esModuleInterop": true
}
}
Ошибка, которую я получаюэто
[ts]
Argument of type '(req: BetterRequest, res: Response) => void' is not assignable to parameter of type 'RequestHandlerParams'.
Type '(req: BetterRequest, res: Response) => void' is not assignable to type 'RequestHandler'.
Types of parameters 'req' and 'req' are incompatible.
Type 'Request' is not assignable to type 'BetterRequest'.
Property 'foo' is missing in type 'Request'.
Я понимаю, что говорит ошибка, и я могу либо отключить эти предупреждения из файла tsconfig.json
, либо с помощьюкомментарийНо это не то, что мне нужно.
Как правильно написать код, чтобы справиться с этой ситуацией?
- единственный следующий способ?
// index.ts
function handler(req: Request, res: Response) {
const req2 = req as BetterRequest;
req2.foo = 'bar';
}