網站搜尋

node.js - 如何在 Typescript/Express 中通過聲明合併修改 `request.params.id` 的類型?


我已成功將 currentUser 添加到 Express 的 Request 介面中:

declare global {
  namespace Express {
    export interface Request {
      currentUser?: User;
    }
  }
}

然而,我也想要指出,Request 的路徑參數 req.params.id(其中 req 的類型是 Express.Request)是一個數字,而不是字串(字串是 Request 介面中 params 的預設類型)。但我不確定如何實現,因為它嵌套在 ParamsDictionary 介面中。這裡是一段我 未成功 嘗試的程式碼片段:

declare global {
  namespace Express {
    export interface ParamsDictionary extends Request {
      id: number;
    }
  }
}

供參考,Request 在預設的 Express/Typescript 配置檔案中定義如下:

interface Request<
        P = core.ParamsDictionary,
        ResBody = any,
        ReqBody = any,
        ReqQuery = core.Query,
        Locals extends Record<string, any> = Record<string, any>
    > extends core.Request<P, ResBody, ReqBody, ReqQuery, Locals> {}

這就是為什麼我一直在嘗試修改 ParamsDictionary,我假設它包含可以在中介軟體或路由函數的 req.params 中找到的路徑參數。我仍然會收到像這樣的錯誤,這證明 Typescript 仍然假設 id 是字串(我已確認它不是,它是以數字傳遞的):