我试图在@types/express
中声明的Express Request定义上添加新字段'ws',但是在运行时我遇到了错误:
src/routes/api/messages.ts:11:20 - error TS2339: Property 'ws' does not exist on type 'Request<ParamsDictionary, any, any>'
我在项目中创建了一个custom.d.ts
文件:
export {};
declare global {
namespace Express {
interface Request {
ws?: any;
}
}
}
此文件放置在src/types/
和tsconfig.json
部分中的compilerOptions -> typeRoots
中,并且文件夹依次由paths
引用(仅在示例中为关键部分):
{
"compilerOptions": {
"node_modules/@types",
"src/types/*"
},
"paths": {
"*": [
"node_modules/*",
"src/types/*"
]
},
}
这一切似乎都满足VS Code Typescript环境,但是在运行时失败。开发人员运行时正在使用nodemon server
,内容为nodemon.json
:
{
"watch": ["src"],
"ext": "ts",
"ignore": ["src/**/*.spec.ts"],
"exec": "ts-node ./src/index.ts"
}
目前,我唯一的解决方法是按如下方式访问该字段:
const ws = (req as any).ws
我正在使用Express 4和打字稿3.8.3。
答案 0 :(得分:0)
根据ts-node bug report找到了可行的解决方案:
基本上,必须使用--files
选项调用ts节点。因此,从CLI:
ts-node --files src
或nodemon.json
:
{
"watch": ["src"],
"ext": "ts",
"ignore": ["src/**/*.spec.ts"],
"exec": "ts-node --files ./src/index.ts"
}