下面的代码显示了 Next.js 项目中的一个错误。
Argument of type 'NextApiRequest' is not assignable to parameter of type 'Request<ParamsDictionary, any, any, ParsedQs, Record<string, any>>'. Type 'NextApiRequest' is missing the following properties from type 'Request<ParamsDictionary, any, any, ParsedQs, Record<string, any>>': get, header, accepts, acceptsCharsets, and 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)
}
上述问题的任何解决方案。
最佳答案
Blockquote
我对这个问题的解决方案是使用联合类型 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;
关于typescript - 类型 'NextApiRequest' 缺少类型 'Request<ParamsDictionary, any, any, ParsedQs, Record<string, any>>' 的以下属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68536004/