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-sessionindex.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'的主要内容,如果未能解决你的问题,请参考以下文章

Session&&cookie

JavaWeb-10(会话技术之session&amp;JSP)

使用 & 获取 $_SESSION 位置

session&&cookie

Cookie&&Session超详解✌

Cookie&Session