Sir*_*hau 6 node.js express typescript
我想为我的response.locals. 它用于将数据附加到请求-响应周期中。
我尝试过的
// ./types/express/index.d.ts
declare global {
declare namespace Express {
interface Response {
locals: {
userId: number;
};
}
}
}
Run Code Online (Sandbox Code Playgroud)
// tsconfig.json
"compilerOptions": {
"typeRoots": ["./types"],
}
Run Code Online (Sandbox Code Playgroud)
myController.post("/", async (request, response) => {
// Can't get type in my controller
const { userId } = response.locals; // <- userId is any
Run Code Online (Sandbox Code Playgroud)
目标:为我的response.locals变量获得正确的类型推断
版本:
"express": "^4.17.1",
"@types/express": "^4.17.8",
"typescript": "^4.5.4"
我们可以看到@types/express-serve-static-core/index.d.ts有一个全局命名空间,Express其中包含一些我们可以扩展的接口。其中之一是Locals:)
解决方案:
src/types.d.ts(或类似的,将其包含在 tsconfig 中,例如在“类型”字段中)
declare global {
namespace Express {
interface Locals {
anything: 'here'
}
}
}
Run Code Online (Sandbox Code Playgroud)
在没有适当的 TypeScript 背景的情况下,我能够编译以下内容(经过一些尝试和错误):
import {Request, Response} from "express";
interface Locals extends Record<string, any> {
userId: number;
}
interface MyResponse extends Response {
locals: Locals;
}
export function middleware(request: Request, response: MyResponse) {
const {userId} = response.locals;
response.end(userId);
return userId;
}
Run Code Online (Sandbox Code Playgroud)
声明文件 ( .d.ts) 包含:
export declare function middleware(request: Request, response: MyResponse): number;
Run Code Online (Sandbox Code Playgroud)
所以number类型被正确推断出来。
当我在express.
| 归档时间: |
|
| 查看次数: |
2739 次 |
| 最近记录: |