为什么 Next.js 的 req.query 对象的值是字符串类型 | 细绳[]?

joe*_*une 13 node.js typescript next.js

Next.js 的 API 路由接收一个对象 - 它是http.IncomingMessagereq的扩展,带有附加中间件,例如. 在他们的utils.ts中找到的的类型是:req.queryreq.query

query: {
    [key: string]: string | string[]
}
Run Code Online (Sandbox Code Playgroud)

为什么可以从查询中接收字符串数组?

我正在尝试对查询值执行字符串方法,但遇到 TS 错误 -_-

someString.split() // => Property 'split' does not exist on type 'string | string[]'.
Run Code Online (Sandbox Code Playgroud)

Bru*_*uzo 3

我认为如果我们不使用多个同名参数,我们可以使用它:

const id = req.query.id as string
Run Code Online (Sandbox Code Playgroud)

  • 这不能确保“req.query.id”是一个字符串,并且仍然可能导致运行时错误。在执行操作之前,您应该使用像“typeof req.query.id === 'string'”这样的类型保护来缩小其类型范围。 (8认同)