Javascript 根据函数参数,键入不同的接口脚本

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

我有以下场景,我有2个接口:

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你能解释一下吗?或者给我链接一些资源?第一次点击: