我正在阅读环境模块和声明合并,我正在尝试覆盖 Request
的Express TypeScript 定义文件。
我可以添加其他属性,但我似乎无法覆盖现有属性。
declare global {
namespace Express {
interface Request extends Record<string, unknown> {
addition: "a" | "b";
body: unknown;
cookies: unknown;
route: unknown;
signedCookies: unknown;
}
}
}
// type hinting with "a" | "b"
let addition = express.req.addition
// still any
let overridden = express.req.body
大量问题展示了如何增强而不是覆盖。
我还尝试了以下方法:
declare module "express-serve-static-core" {
namespace Express {
interface Request extends Record<string, unknown> {
addition: "a" | "b";
body: unknown;
}
}
}
让我们通过重新声明
Request
模块来覆盖 express
接口,并记住使类型定义文件成为模块:
declare module 'express' {
interface Request {
addition: "a" | "b";
body: unknown;
cookies: unknown;
route: unknown;
signedCookies: unknown;
}
}
export {}; // magic