我正在创建一个向 NextRequest 添加“name”属性的中间件,该属性将在 API 的其他部分中使用
import { NextRequest, NextResponse } from 'next/server'
export function middleware(req: NextRequest) {
req.name = 'Foo'
NextResponse.next()
}
我收到这个错误Property 'name' does not exist on type 'NextRequest'
另一种方法是创建一个扩展 NextRequest 的接口,但我必须导入所有想要访问“name”属性的文件
import { NextRequest, NextResponse } from 'next/server'
interface CustomRequest extends NextRequest {
name: string
}
export function middleware(req: CustomRequest) {
req.name = 'Foo'
NextResponse.next()
}
有什么方法可以将此属性添加到 NextRequest 全局类型中吗?
显示我如何根据评论解决问题胡利奥马尔维斯 https://stackoverflow.com/questions/70172177/how-to-add-a-new-property-to-nextrequest-types#comment124051104_70172177
创建一个.d.ts文件,可以使用任何名称
// global.d.ts
import { NextRequest as OriginalNextRequest } from 'next/server'
declare global {
declare interface NextRequest extends OriginalNextRequest {
name: string
}
}
有必要:
导入修改后的NextRequest
// tsconfig.json
"paths": {
"*": ["*.d.ts"]
}
如果 .d.ts 文件位于文件夹中
"paths": {
"*": ["types/*.d.ts"]
}
现在打字稿没有显示错误name
不存在于NextRequest
import { NextResponse } from 'next/server'
export function middleware(req: NextRequest) {
req.name = 'Foo'
NextResponse.next()
}
NOTE:不导入NextRequest
从下一个开始,否则全局类型将被替换为NextRequest
从进口
import { NextRequest, NextResponse } from 'next/server'
export function middleware(req: NextRequest) {
req.name = 'Foo' // error
NextResponse.next()
}
如果你想使用NextRequest
从下一步开始,重命名导入
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)