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