有时,我想将第二个参数传递给函数,但有时我不传递第二个自变量。
以下是我的方法:
const updateStartEnd = (newEndDate: any, newStartDate: any) => {
if (prevDate && newStartDate && newStartDate.isBefore(prevDate, 'd')) {
setEndDate(newStartDate);
} else {
setEndDate(newEndDate);
}
};
我称这个函数如下:
const some_function = (newDates: {startDate, endDate}) => {
if (endDate !== null) {
updateStartEnd(endDate, startDate);
} else {
updateStartEnd(endDate, startDate); //here i dont want to pass startDate as it will not need to check for if condition in the updateStartEnd.
}
}
有人能帮我吗?
使参数在updateStartEnd
中可选。然后,当这两个参数都是未定义的时,您需要在updateStartEnd
内部进行处理
const updateStartEnd = (newEndDate?: any, newStartDate?: any) => {
// rest of the code
};
由于使用的是typescript,因此可以设置默认参数。此外,在这种方法中,由于您总是会得到一个moment
对象,因此&& newStartDate
将成为一个冗余检查,并且可以删除
const updateStartEnd = (newEndDate: moment = moment(), newStartDate: moment = moment()) => {
if (prevDate && newStartDate.isBefore(prevDate, 'd')) {
setEndDate(newStartDate);
} else {
setEndDate(newEndDate);
}
};
您甚至可以将args作为可选参数,但随后必须添加逻辑来验证undefined
const updateStartEnd = (newEndDate?: moment, newStartDate?: moment) => {
if (prevDate && newStartDate && newStartDate.isBefore(prevDate, 'd')) {
setEndDate(newStartDate);
} else if(!!newEndDate) {
setEndDate(newEndDate);
}
};
此外,由于您正在处理日期,并且希望它是moment
类型,因此最好使用moment
作为类型,而不是任何类型。如果我称之为灭绝:
updateStartEnd(true, true)
它会提前验证并抛出错误。