passport.js 的扩充用户类型

问题描述 投票:0回答:0

我正在尝试在 passport.js 中使用正确的用户输入。

Passport 在这里将用户界面定义为 Express 命名空间中的空界面: https://github.com/DefinitelyTyped/DefinitelyTyped/blob/22f314360cf1f8c273e9985748519cb07984dc79/types/passport/index.d.ts#L20

所以,当然,开箱即用,像下面这样的代码会产生错误“属性‘id’在类型‘User’上不存在”:

passport.serializeUser(function(user, cb) {
  process.nextTick(function() {
    cb(null, user.id);
  });
});

这是有道理的。

我通过类型合并设法避免了错误:在 .d.ts 文件中,我有:

// express_augmentation.d.ts

declare namespace Express {
  interface User {
    id: string
  }
}

这很好用。

但是,如果我不想手动指定用户有一个 id(可能还有一个电子邮件和其他属性),而是想使用我的 User 类,它有一个 id 怎么办?

我正在考虑按照以下方式做一些事情:

// express_augmentation.d.ts

declare namespace Express {
  import MyUser from '../models/user';
  interface User extends MyUser {}
}

但这似乎不起作用。我有点难过。知道我做错了什么吗?

typescript express namespaces passport.js
© www.soinside.com 2019 - 2024. All rights reserved.