提问人:qnilab 提问时间:5/2/2023 更新时间:5/4/2023 访问量:132
增强护照 .js 的用户类型
Augmenting User type for passport.js
问:
我正在尝试使用正确的用户键入护照.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(可能还有电子邮件和其他属性),而是想使用具有 id 的 User 类,该怎么办?
我正在考虑做一些事情:
// express_augmentation.d.ts
declare namespace Express {
import MyUser from '../models/user';
interface User extends MyUser {}
}
但这似乎行不通。我有点难住了。知道我做错了什么吗?
答:
0赞
qnilab
5/4/2023
#1
啊,问题是导入失败了 - 尽管 tsc 和 VSCode 都没有突出显示这个问题。
这有效:
declare namespace Express {
type MyUser = import('../models/user').default;
interface User extends MyUser {}
}
出于某种原因,其行为与导入默认导出的常规应用代码不同。我必须说我不熟悉这个结构,我必须阅读它。import MyUser from '../models/user';
... = import(...).default
最后,代码可以进一步压缩为:
declare namespace Express {
type User = import('../models/user').default;
}
评论