[英]alternative of switch in typescript
I am trying to think of any alternative for my switchcase as it is a very long I have nested switch case which looks like this我正在尝试为我的开关箱考虑任何替代方案,因为它很长我嵌套的开关箱看起来像这样
switch (currentTab) {
case pending:
switch (status) {
case approved:
case denied:
break;
case partialApproved:
finalUpdatedInvoiceAmount = updatedInvoiceAmount - (feeAmount - (approvedFeeAmount || 0));
break;
}
break;
case approved:
switch (status) {
case denied:
case partialApproved:
finalUpdatedInvoiceAmount = updatedInvoiceAmount - (feeAmount - (approvedFeeAmount || 0));
break;
}
break;
case denied:
switch (status) {
case approved:
case partialApproved:
finalUpdatedInvoiceAmount = oldApprovedFeeAmount ? updatedInvoiceAmount + (feeAmount - oldApprovedFeeAmount) : updatedInvoiceAmount - (feeAmount - (approvedFeeAmount || 0));
break;
}
break;
case partiallyApprovedTab:
switch (status) {
case approved:
case denied:
case partialApproved:
finalUpdatedInvoiceAmount = oldApprovedFeeAmount ? updatedInvoiceAmount + (feeAmount - oldApprovedFeeAmount) : updatedInvoiceAmount - (feeAmount - (approvedFeeAmount || 0));
break;
}
break;
}
is an alternate possibility for this?这是另一种可能性吗? As the code is very huge and later other cases might enter in this.
由于代码非常庞大,以后可能会出现其他情况。
Maybe you can try handlerMap:也许你可以试试handlerMap:
const handler1 = () => { finalUpdatedInvoiceAmount = updatedInvoiceAmount - (feeAmount - (approvedFeeAmount || 0)); }
const handler2 = () => { finalUpdatedInvoiceAmount = oldApprovedFeeAmount ? updatedInvoiceAmount + (feeAmount - oldApprovedFeeAmount) : updatedInvoiceAmount - (feeAmount - (approvedFeeAmount || 0)); }
const handlerMap = {
[pending]: {
[partialApproved]: handler1
},
[approved]: {
[denied]: handler1,
[partialApproved]: handler1,
},
[denied]: {
[approved]: handler2,
[partialApproved]: handler2,
},
[partiallyApprovedTab]: {
[approved]: handler2,
[denied]: handler2,
[partialApproved]: handler2,
}
}
handlerMap[currentTab] && handlerMap[currentTab][status] && handlerMap[currentTab][status]()
// handlerMap[currentTab]?.[status]?.()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.