JS/Docker - 'Session & Partial<SessionData>' 类型上不存在属性'user'
Posted
技术标签:
【中文标题】JS/Docker - \'Session & Partial<SessionData>\' 类型上不存在属性\'user\'【英文标题】:JS/Docker - Property 'user' does not exist on type 'Session & Partial<SessionData>'JS/Docker - 'Session & Partial<SessionData>' 类型上不存在属性'user' 【发布时间】:2021-04-11 11:57:01 【问题描述】:我正在尝试将express-session
添加到我在 Docker 下运行的 Node.js 应用程序中。
阅读很多帖子:
Express Session: Property 'signin' does not exist on type 'Session & Partial<SessionData>'. (2339) https://github.com/DefinitelyTyped/DefinitelyTyped/issues/49941 https://github.com/DefinitelyTyped/DefinitelyTyped/issues/46861
我尝试对Session
属性进行声明合并,这是我的tsconfig.json
的样子:
"typeRoots": [
"./src/types",
"./node_modules/@types"
]
在我的src/types
文件夹中,我有index.d.ts
文件:
declare module 'express-session'
interface Session
user: string;
但是当我使用docker-compose up
命令运行我的项目时,它给了我以下错误:
/app/node_modules/ts-node/src/index.ts:421
return new TSError(diagnosticText, diagnosticCodes)
^
TSError: ⨯ Unable to compile TypeScript:
src/routes/auth.ts(26,17): error TS2339: Property 'user' does not exist on type 'Session & Partial<SessionData>'.
at createTSError (/app/node_modules/ts-node/src/index.ts:421:12
我认为这不是 Docker 问题,因为它发生在 Node.js 应用程序启动期间。 有谁知道如何解决这个问题?
【问题讨论】:
【参考方案1】:您应该扩展SessionData 接口,而不是Session
。 @types/express-session
的index.d.ts
文件中没有Session
接口。
declare module 'express-session'
interface SessionData
user: string;
【讨论】:
我有同样的问题并尝试过,但 ts-node 仍然抛出错误。 tsc 和 ts-lint 接受声明,但由于某种原因 ts-node 不接受。【参考方案2】:除了上一个答案,您必须扩展SessionData
接口,您可以使用--files
标志ts-node
。
在这个答案post 中描述。现在看来ts-node
不接受你的tsconfig.json
。
【讨论】:
【参考方案3】:要扩展express-session
类型(截至@types/express-session@^1.17.4
),您需要添加:
import "express-session"
到您的d.ts
文件的顶部:即:
import "express-session";
declare module 'express-session'
interface SessionData
tenant: string
还要确保,正如@slideshowp2 所说,您正在扩展SessionData
不是 Session
【讨论】:
以上是关于JS/Docker - 'Session & Partial<SessionData>' 类型上不存在属性'user'的主要内容,如果未能解决你的问题,请参考以下文章