我正在深入研究 React、Express 和 Typescript 教程,我对此还很陌生。尝试更好地理解设置自定义类型的工作原理,这就是我目前所拥有的。
在 types.ts 文件中:
import { Request, Response } from "express";
import { Redis } from "ioredis";
//import express from "express"; // adding this did not help
//import session from "express-session"; // adding this did not help
export type MyContext = {
req: Request; // & { session: Express.Session }; // this is my troublesome line
redis: Redis;
res: Response;
};
尝试添加时
& { session: Express.Session }
我收到错误:
any Namespace 'global.Express' has no exported member 'Session'.ts(2694)
已对 devDepency 和依赖项的版本进行了比较,以便它们是相同的。尝试最新版本没有任何变化。
devDependencies:
"@types/express": "^4.17.7",
"@types/express-session": "^1.17.0",
...
dependencies:
"express": "^4.17.1",
"express-session": "^1.17.1",
...
我尝试过的事情:
正如代码中的注释所示,不同的导入语句,例如express和/或session。
将 package.json 中的 strictNullChecks 从 true 更改为 false。
最新版本的express、express-session、@types/express 和@types/express-session。
将类型更改为接口(interface)。
在发布此内容之前仔细检查了类似的问题(我已经在 SO 和 Google 上查看过这里)。
将 GitHub 上教程的最终代码与我自己的代码进行比较(据我所知,它们是相同的)。
最佳答案
您收到的错误告诉您它正在 global.Express.Session
中查找类型。这是因为您没有名为 Express
的导入,因此它试图在全局范围内找到它。当然,这是不存在的!
这对我有用,假设 Session
类型应该来自 express-session
库:
import { Request, Response } from "express";
import { Redis } from "ioredis";
import session from "express-session";
export type MyContext = {
req: Request & { session: session.Session };
redis: Redis;
res: Response;
};
关于reactjs - 在遵循 React、Express 和 Typescript 教程时尝试添加 & { session : Express. Session } 以键入 MyContext 时出现 "No exported member"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66523196/