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' });
}

Relaterte artikler