Javascript 根据函数参数,键入不同的接口脚本
我有以下场景,我有2个接口:Javascript 根据函数参数,键入不同的接口脚本,javascript,typescript,mongoose,Javascript,Typescript,Mongoose,我有以下场景,我有2个接口: export interface UserInterface extends Document { email: string, role: string, created: Date, disabled: Boolean, author: AuthorInterface } export interface UserModelInterface extends UserInterface { password: s
export interface UserInterface extends Document {
email: string,
role: string,
created: Date,
disabled: Boolean,
author: AuthorInterface
}
export interface UserModelInterface extends UserInterface {
password: string
}
我有一个方法:
public findUserById(_id: mongoose.Types.ObjectId | string, sensitive: Boolean = false): Promise<UserInterface | null> {
if (sensitive) return User.findOne({ _id }).exec()
return User.findOne({ _id }, { password: 0 }).exec()
}
public findUserById(_id:mongoose.Types.ObjectId | string,敏感:Boolean=false):承诺{
if(敏感)返回User.findOne({u id}).exec()
返回User.findOne({u id},{密码:0}).exec()
}
我想知道:
这是一个通过ID获取用户的方法。
sensitive
默认为false
开关导致密码被排除,因此我使用UserInterface
我现在遇到的问题是,如果有人将sensitive设置为true
,那么我需要使用UserModelInterface
,而不是UserInterface
,因为密码在UserInterface
中被排除
这可能吗?谢谢@Bergi为我指明方向。解决方案是使用重载:
public findUserById(_id: mongoose.Types.ObjectId | string, sensitive?: false): Promise<UserInterface | null>
public findUserById(_id: mongoose.Types.ObjectId | string, sensitive?: true): Promise<UserModelInterface | null>
public findUserById(_id: mongoose.Types.ObjectId | string, sensitive: Boolean = false): Promise<UserModelInterface | UserInterface | null> {
if (sensitive) return User.findOne({ _id }).exec()
return User.findOne({ _id }, { password: 0 }).exec()
}
public findUserById(_id:mongoose.Types.ObjectId |字符串,敏感?:false):承诺
public findUserById(_id:mongoose.Types.ObjectId |字符串,敏感?:true):承诺
public findUserById(_id:mongoose.Types.ObjectId | string,敏感:Boolean=false):承诺{
if(敏感)返回User.findOne({u id}).exec()
返回User.findOne({u id},{密码:0}).exec()
}
这就是重载的好处。@Bergi你能解释一下吗?或者给我链接一些资源?第一次点击: