【发布时间】:2022-01-04 22:40:25
【问题描述】:
我有一个带有可选参数的函数
export const sentryException = (
error: Error,
contextLabel?: string,
contextInfo?: Context,
specificTags?: SentryTags,
) => {
如图所示,最后 3 个是可选的。但是,如果提供了contextLabel,则必须提供contextInfo。我宁愿不必这样做
if ((contextLabel && !contextInfo) || (contextInfo && !contextLabel)) {
// throw error
}
您可以想象,随着所需输入分组数量的增加,这可能会变得非常混乱!
如果提供了特定参数,是否有任何方法要求必须在函数调用中传递可选参数的子集?
编辑:
我只是想清楚// throw error 注释与error 参数无关。我的意思是contextLabel 和contextInfo 必须始终都被定义(而不是undefined);否则,该函数应该无法执行。
所以为了简单起见,我们假设所有类型都是字符串,除了error,那么有效的调用将是:
sentryException(err, 'a', 'b')
sentryException(err, 'a', 'b', 'c')
sentryException(err, undefined, undefined, 'c')
sentryException(err)
【问题讨论】:
-
那个
if条件是一个简单的异或,可以用if (contextInfo !== contextLabel)表示
标签: typescript optional-parameters