Express - 所有“用户”声明必须具有相同的修饰符

tha*_*uy_ 8 javascript node.js express typescript

我正在我的应用程序中使用express和passport,在这两个包中,界面下都有一个user属性Request。目前,在请求对象中express具有一个user属性,但没有附加其他属性,例如req.user。我正在尝试对express进行声明合并(不太确定这是否是正确的术语),以便告诉打字稿附加了Express.Request.user一个id属性,如下所示:

declare namespace Express {
  export interface Request {
    user: {
      id: string
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

同时也passport有一个user属性,但值为Express.User。当我执行上面的声明合并时,我收到一条错误,提示“All declarations of 'user' must have identical modifiers.这是 的声明文件” passport。

interface User {}

        interface Request {
            authInfo?: AuthInfo;
            user?: User;

            // These declarations are merged into express's Request type
            login(user: User, done: (err: any) => void): void;
            login(user: User, options: any, done: (err: any) => void): void;
            logIn(user: User, done: (err: any) => void): void;
            logIn(user: User, options: any, done: (err: any) => void): void;

            logout(): void;
            logOut(): void;

            isAuthenticated(): this is AuthenticatedRequest;
            isUnauthenticated(): this is UnauthenticatedRequest;
        }
Run Code Online (Sandbox Code Playgroud)

我知道这是因为接口不匹配,但如何克服这个问题?欢迎任何帮助。非常感谢!

msr*_*thr 7

我遇到了同样的问题 - 我设法通过直接向User界面添加属性而不是Request.user-

在@types/express/index.d.ts

declare global {
  namespace Express {
    interface User {
      userId: number;
      name: string;
      email: string;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)