node.js - typescript og express js. endre res json `Response` type
i typescript prøver jeg å overskrive express's Response json-objekt til å være en spesifikk type objekt som alltid skal brukes
for eksempel, jeg vil håndheve en grensesnitt-type som vil gi en feil hvis følgende format ikke ble fulgt
return res.status(200).json({
data: ["a", {"a": "b"}],
success: true,
});
Jeg forsøkte å bruke dts-gen --m express -f src/types/express.d.ts for å lage deklarasjonsfilen for å endre den, men det endte i fiasko.
er det en måte å overskrive en spesifikk type i et eksisterende bibliotek på, eller må jeg lage en erklæringsfil som er spesifikk for mine behov?
Svar #1
interface Json {
success: boolean;
data: any[];
}
type Send<T = Response> = (body?: Json) => T;
interface CustomResponse extends Response {
json: Send<this>;
}
Jeg klarte å lage et nytt grensesnitt som utvidet dette. Trengte bare å lære litt mer :) forhåpentligvis kan dette hjelpe noen andre!
Svar #2
Du kan sette tilpassede typer i generiske typer av req og res-objekter slik som:
import type * as E from 'express';
interface CustomResponseType {
test: string;
}
export default async function Example(
req: E.Request<undefined, CustomResponseType, [CustomReqBodyType?], [CustomReqQueryType?]>,
res: E.Response<CustomResponseType>
): Promise<E.Response<CustomResponseType, Record<string, any>>> {
return res.status(200).json({ test: 'success' });
}
