typescript - “NextApiRequest”类型缺少“Request”类型的以下属性>'
问题描述
以下代码显示 Next.js 项目中的错误。
“NextApiRequest”类型的参数不可分配给“Request<ParamsDictionary, any, any, ParsedQs, Record<string, any>>”类型的参数。类型“NextApiRequest”缺少类型“Request<ParamsDictionary,any,any,ParsedQs,Record<string,any>>”中的以下属性:get、header、accepts、acceptCharsets 和 29 more.ts(2345)
import session from 'express-session'
import connectMongo from 'connect-mongo'
import type { NextApiRequest, NextApiResponse } from 'next'
const MongoStore = connectMongo(session)
export default function sessionMiddleware(req: NextApiRequest, res: NextApiResponse, next: any) {
const mongoStore = new MongoStore({
client: req.dbClient,
stringify: false,
})
return session({
secret: process.env.SESSION_SECRET ?? '',
resave: false,
saveUninitialized: false,
store: mongoStore,
})(req, res, next)
}
上述问题的任何解决方案。
解决方案
块引用
我对这个问题的解决方案是使用联合类型https://www.typescriptlang.org/docs/handbook/unions-and-intersections.html
import { RequestHandler, Request, Response } from 'express';
import { NextApiRequest, NextApiResponse } from 'next';
type NextApiRequestWithFormData = NextApiRequest &
Request & {
files: any[];
};
type NextApiResponseCustom = NextApiResponse & Response;
export default function initMiddleware(middleware: RequestHandler) {
return (
req: NextApiRequestWithFormData,
res: NextApiResponseCustom
): Promise<any> =>
new Promise((resolve, reject) => {
middleware(req, res, (result: any) => {
if (result instanceof Error) {
return reject(result);
}
return resolve(result);
});
});
}
以下代码应该适合您
import { RequestHandler, Request, Response } from 'express';
import { NextApiRequest, NextApiResponse } from 'next';
type NextApiRequestWithFormData = NextApiRequest &
Request & {
files: any[];
};
type NextApiResponseCustom = NextApiResponse & Response;