如何将两个参数传递给打字稿中的函数或none?
How to pass two parameters into function or none in typescript?
我想改进一个 returns 状态的功能。它不接受任何其他参数,除了记录器和用它记录的消息。
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 '{}'.
并且我不知道如何正确地做到这一点。我想学习 - 你能解释一下这是如何实现的吗?
编辑:您没有提供 Logger 类型的外观。但是看到你的代码,我想它一定是这样的:
type Logger = { info: (someInfo: string) => void }
定义状态函数接收的参数类型:
type paramsStatus = {
logger: { info: (someInfo: string) => void },
reason: string,
}
您使用 ?操作员。由于 logger 和 reason 是强制性的(见上面的类型),它们都必须传递给状态函数。两种方式都可以,两种方式都对。
export function status(params?: paramsStatus) {
params && params.logger.info(params.reason); //If params exist, then log the info
return {
result: 'ok',
};
}
我想改进一个 returns 状态的功能。它不接受任何其他参数,除了记录器和用它记录的消息。
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 '{}'.
并且我不知道如何正确地做到这一点。我想学习 - 你能解释一下这是如何实现的吗?
编辑:您没有提供 Logger 类型的外观。但是看到你的代码,我想它一定是这样的:
type Logger = { info: (someInfo: string) => void }
定义状态函数接收的参数类型:
type paramsStatus = {
logger: { info: (someInfo: string) => void },
reason: string,
}
您使用 ?操作员。由于 logger 和 reason 是强制性的(见上面的类型),它们都必须传递给状态函数。两种方式都可以,两种方式都对。
export function status(params?: paramsStatus) {
params && params.logger.info(params.reason); //If params exist, then log the info
return {
result: 'ok',
};
}