簡體   English   中英

如何在現有類型上添加新類型

[英]How to add new typings on existing one

我是打字稿的初學者。 我正在使用 express 和req.id並希望在中間件中訪問req.id

當我這樣做時,我收到此錯誤

Property 'id' does not exist on type 'Request<ParamsDictionary, any, any, ParsedQs>'

我正在使用的代碼

app.use(function (req, res, next) {
  var log = logger.child(
    {
      id: req.id,
      body: req.body,
      params: req.params,
    },
    true
  );

  log.info({ req: req });
  next();
});

目前我正在通過//@ts-ignore注釋抑制打字稿錯誤

PS:如果我將來可能遇到同樣的問題,如果你能幫助我理解如何在任何模塊/包中擴展類型,我也會很慷慨

謝謝@Linda 給我一個良好的開端。 我通過添加自定義類型存根解決了這個問題。 這在打字稿中稱為模塊增強

創建一個文件types.d.ts (模塊聲明文件)

import "express"; // needed to extend the type

declare module 'express' { 
  interface Request {
    id: string; // this will add new property of type string (access by `req.id`)
  }
}

express 的類型是一個真正令人頭疼的問題,因為涉及到多個包,但我終於弄清楚你需要擴展哪一個。 我們只需要聲明我們要添加的一個屬性,因為此定義將與現有定義合並而不是替換它。

declare module "express-serve-static-core" {
    interface Request {
        id: number;
    }
}

游樂場鏈接

這使我們可以req.id地訪問req.id

請注意,調用next()出現錯誤,因為顯然next可能是undefined

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM