[英]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.