在我的 Node.js / Express 应用程序中,我已经有一段时间的 Headers.ts 文件包含以下内容:
type HttpHeader = 'X-My-Header' | 'X-My-Other-Header' | 'X-Another';
declare module 'express-serve-static-core' {
import * as http from 'http';
interface Request extends http.IncomingMessage, Express.Request {
header(name: HttpHeader): string | undefined;
}
}
Run Code Online (Sandbox Code Playgroud)
它用于编译正常,但是,近期后rm -rf node_modules和npm install再次,我得到了很多错误,像
error TS2339: Property 'get' does not exist on type 'Request'.
error TS2339: Property 'end' does not exist on type 'Response'.
Run Code Online (Sandbox Code Playgroud)
似乎核心问题是node_modules/@types/express/index.d.ts解决了import * as core from "express-serve-static-core"我的小增强并完全跳过真实事物的加载。我不知道为什么,因为我确实node_modules/@types/express-serve-static-core正确安装了一个文件夹。
会是什么呢?
从以下方面判断:
import * as http from 'http';
Run Code Online (Sandbox Code Playgroud)
在您的模块声明中,您实际上并不是在编写您想要的模块“agumentation”,而是替换现有模块。
为了编写模块扩充,您需要将其编写为:
import { Request} from 'express-serve-static-core';
import * as http from 'http';
export type HttpHeader = 'X-My-Header' | 'X-My-Other-Header' | 'X-Another';
declare module 'express-serve-static-core'{
export interface Request extends http.IncomingMessage, Express.Request {
header(name: HttpHeader): string | undefined;
}
}
Run Code Online (Sandbox Code Playgroud)
首先要注意的是,它应该是一个外部“文件”模块(它应该有导入和导出)。
要注意的第二件事是import * as http应该在模块扩充之外的内部是不合法的。
声明的模块现在严格用作扩充。它不会覆盖或替换现有express-server-static-core模块。事实上,该模块需要存在才能被扩充(例如,如果您拼错了模块名称,它将无法编译)。
我无法从您的示例中看出为什么您的代码以前有效。也许express-server-static-core之前声明文件的实现方式有所不同。但是如果你遵循这个例子,事情应该对你有用。
| 归档时间: |
|
| 查看次数: |
2223 次 |
| 最近记录: |