如何将两个参数传递到函数中,或者在typescript中不传递



我想改进一个只返回状态的函数。它不接受任何其他参数,除了记录器和用它记录的消息。

export function status(logger: Logger, reason: string) {
logger.info(reason);
return {
result: 'ok'
};
}

然而,我想让参数是可选的,这样如果我不想记录任何内容,我就不需要传递任何内容。因此我把它改成这样:

export function status(logger?: Logger, reason?: string) {
reason && logger?.info(reason);
return {
result: 'ok'
};
}

然而,我仍然可以提供一个记录器,但不能提供原因,我不喜欢这样。我希望此函数同时接受两个参数或不接受任何参数。所以我尝试了这样的东西:

export function status(param: {logger: Logger, reason: string} | {} = {}) {
param?.logger.info(reason);
return {
result: 'ok'
};
}

然而,现在我得到了TS2339: Property 'logger' does not exist on type '{} | { logger: Logger; reason: string; }'.   Property 'logger' does not exist on type '{}'.,我不知道如何正确地做到这一点。我想学习——你能解释一下这是如何实现的吗?

EDIT:您没有提供Logger类型的外观。但是看到你的代码,我想它一定是类似的东西:

type Logger = { info: (someInfo: string) => void }

定义状态函数接收的参数类型:

type paramsStatus = {
logger: { info: (someInfo: string) => void },
reason: string,
}

你让params是可选的吗?操作人员由于logger和reason是强制性的(请参阅上面的类型(,因此必须将它们都传递给状态函数。两者都是或两者都不是,两种方式都是正确的。

export function status(params?: paramsStatus) {
params && params.logger.info(params.reason); //If params exist, then log the info
return {
result: 'ok',
};
}

相关内容

最新更新