【问题标题】:Type 'NextApiRequest' is missing the following properties from type 'Request<ParamsDictionary, any, any, ParsedQs, Record<string, any>>'“NextApiRequest”类型缺少“Request<ParamsDictionary, any, any, ParsedQs, Record<string, any>>”类型的以下属性
【发布时间】:2021-10-02 18:07:08
【问题描述】:

以下代码显示 Next.js 项目中的错误。

“NextApiRequest”类型的参数不能分配给“Request>”类型的参数。 类型“NextApiRequest”缺少类型“Request>”中的以下属性: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)
}

上述问题的任何解决方案。

【问题讨论】:

    标签: typescript session next.js


    【解决方案1】:

    块引用

    我对这个问题的解决方案是使用类型 union 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;
    

    【讨论】:

      猜你喜欢
      • 2023-04-03
      • 1970-01-01
      • 2021-12-28
      • 1970-01-01
      • 2019-12-24
      • 1970-01-01
      • 2019-04-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多