next.js - nextjs API med typescript, begrense NextApiRequest spørringsparameter til bare string-type


I denne endepunktbehandleren, er det en måte å begrense req.query i NextJS NextApiRequest til bare string-typer i stedet for string | string[]. For eksempel, someQueryParam her er av typen string | string[], men jeg vil bruke det som bare string-type

export default async function handler(
  req: NextApiRequest,
  res: NextApiResponse<Response>
) {

   const { someQueryParam } = req.query;
   
   // pass in someQueryParam as a string into a function call
   const result = functionCall(someQueryParam)
}

TypeScript-feil når man sender someQueryParam inn i en funksjon som bare aksepterer string-type for argumentet:

Argument of type 'string | string[]' is not assignable to parameter of type 'string'.
  Type 'string[]' is not assignable to type 'string'.

Som referanse, her er definisjonen av NextApiRequest i Nextjs-biblioteket

åpen også for forslag til hvordan man på en eller annen måte kan bruke someQueryParam som string-type i stedet for string | string[]-type innenfor handleren før det sendes inn i funksjonen

Svar #1

Det underliggende problemet er at nettadresseprotokollen tillater tildeling av flere spørringsnavn med samme navn. Disse blir deretter sendt som en string[] i stedet for en enkelt streng.

For eksempel, ?value=one&value=two. Derfor bør det være opp til appen å bestemme hvilken verdi den vil akseptere hvis den kun skal bruke én streng.

const value = Array.isArray(params.value) ? params.value[0] : params.value

Relaterte artikler