'Session & Partial' 유형에 'user' 속성이 없습니다.
자바스크립트로 된 코드가 있었는데 그것을 타입스크립트로 변환하려고 합니다.
route.get('/order', async(req,res) => {
var sessionData = req.session;
if(typeof sessionData.user === 'undefined')
{
res.redirect('/panel/login');
}
이것은 내 코드의 한 부분으로, 예전에는 올바르게 작동했습니다.javascript
하지만 지금 나는 이 오류를 받습니다.user
:
속성 'user'가 'Session & Partial' 유형에 없습니다.
다음을 위해 유형을 추가해야 할 것 같습니다.sessionData
가변 및(req, res)
params 하지만 정확히 어떤 타입이 할당되어야 하는지 모르겠습니다.
PS: 이 질문이 중복된 것처럼 보이지만 다른 유사한 질문의 해결책을 시도해 보았지만 효과가 없었습니다.
어떤 도움이라도 주시면 감사하겠습니다.
express-session type 댓글에 명시된 대로 다음을 사용해야 합니다.Declaration merging
.
구현 방법은 다음과 같습니다.Declaration merging
에express-session
:
import session from 'express-session';
declare module 'express-session' {
export interface SessionData {
user: { [key: string]: any };
}
}
저는 방금 당신과 같은 문제에 직면했습니다.이것은 꽤 최근의 문제인 것 같습니다. 여기에 설명을 참조하십시오.
이 문제를 해결하기 위해 Github 문제에 설명된 대로 모듈을 오버로드했습니다.
import "express-session";
declare module "express-session" {
interface SessionData {
user: string;
}
}
교체하기만 하면 됩니다.string
그 분야에 필요한 유형으로.
또한 추가했습니다../typing-stubs
에tsconfig.json
"typeRoots": [
"./typing-stubs",
"./node_modules/@types"
]
소스 코드를 추적하면 다음과 같은 설명을 찾을 수 있습니다.
/**
* This interface allows you to declare additional properties on your
* session object
* using [declaration merging]
* (https://www.typescriptlang.org/docs/handbook/declaration-merging.html).
*
* @example
* declare module 'express-session' {
* interface SessionData {
* views: number;
* }
* }
*
*/
interface SessionData {
cookie: Cookie;
}
설명서를 읽어 보십시오. 모듈 확대 섹션이 있습니다. https://www.typescriptlang.org/docs/handbook/declaration-merging.html#module-augmentation
이제 "SessionData"를 직접 확장하고 src/types/express-session/index.d.ts:
import { SessionData } from "express-session"
declare module "express-session" {
interface SessionData {
user: { [key: string]: any }
}
}
tsconfig.json은 컴파일에 선언을 포함하도록 유형 루트를 설정해야 합니다.
"typeRoots": ["./node_modules/@types", "./src/types"],
방금 했어요.
(req.session as ISession).UserName = payload.UserName;
(req.session as ISession).Email = payload.Email;
I 세션은 다음과 같은 내보내기 인터페이스입니다.
import { Session } from "express-session";
export interface ISession extends Session {
UserName?: string;
Email?: string;
}
다른 모든 제안들은 형식 선언을 무시하라고 하지만, 그 제안들은 저에게 효과가 없었습니다.이것이 유일하게 효과가 있었습니다.이것이 누군가에게 도움이 되기를 바랍니다.
이는 위의 모든 단계를 수행했지만 계속 실패하는 사람을 위해 나중에 참조하기 위한 것입니다(vscode는 더 이상 오류를 표시하지 않지만 여전히 실패함).ts-node
문제, 추가--transpile-only
당신에게package.json
스크립트, 다음과 같습니다.nodemon --exec ts-node -T src/app.ts
.
원본: 고속 요청에 대한 유형 스크립트 선언 병합 실패
저는 최근에 이 문제를 겪었고 여기 제가 생각해낸 해결책이 있습니다.
import { Request } from "express";
import { Session } from "express-session";
export type SessionWithUser = Session & { user: string | {}};
export type AuthRequest = Request & {
session?: SessionWithUser;
auth?: { user: string; permission_id: number };
};
언급URL : https://stackoverflow.com/questions/65108033/property-user-does-not-exist-on-type-session-partialsessiondata
'programing' 카테고리의 다른 글
Excel 시트 이름을 가져와 매크로에서 변수로 사용 (0) | 2023.06.24 |
---|---|
Java에서 Statement(Callable Statement)를 인쇄하는 방법은 무엇입니까? (0) | 2023.06.24 |
@SpringBootConfiguration과 @Configuration의 차이점은 무엇입니까? (0) | 2023.06.24 |
행이 아직 없는 경우에만 해당 행 삽입 (0) | 2023.06.24 |
웹 API 1을 사용하는지 웹 API 2를 사용하는지 어떻게 결정합니까? (0) | 2023.06.24 |