typescript 中 switch 的替代方案

2023-12-10

我正在尝试为我的开关盒寻找任何替代方案,因为它很长 我有嵌套的开关盒,看起来像这样

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;
        }

这是另一种可能性吗? 由于代码非常庞大,以后可能会出现其他情况。


也许你可以尝试 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]?.()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

typescript 中 switch 的替代方案 的相关文章

随机推荐

  • C# 中 async 总是异步吗? [复制]

    这个问题在这里已经有答案了 我正在做研发async and await对于我的项目 我学到的是 当async方法被调用时 它释放线程并让该线程被其他线程使用 我们可以使用可等待方法设置回调await关键字 并且该方法在结果准备好时返回值 如
  • Qt 对话框窗口的动态翻译

    我正在创建一个 Qt 应用程序 并添加了动态翻译 我按照以下示例进行操作 http www qtcentre org wiki index php title Dynamic translation in Qt4 applications
  • SQL Server:CROSS JOIN 和 FULL OUTER JOIN 之间有什么区别?

    SQL Server 中的 CROSS JOIN 和 FULL OUTER JOIN 有什么区别 它们是相同还是不同 请解释 什么时候会使用其中任何一个 A CROSS JOIN在两个表之间生成笛卡尔积 返回所有行的所有可能组合 它没有ON
  • ASP.Net 4.5 模型绑定按导航属性排序

    All 我有一个包含以下列的网格视图 分页效果很好 但排序不行 每次我单击类别列按类别排序时 我都会收到此错误 未为类型 ESA Data Models Entity Project 定义实例属性 Category CategoryName
  • 操作员删除签名意外行为[重复]

    这个问题在这里已经有答案了 stroustroup 在他的 C 编程语言 第 4 版 一书中提到 可以通过编写具有以下签名的全局函数来重载全局运算符 new delete void operator new size t use for i
  • 使用 Deriv 包求导 wrt 向量

    我正在探索 autodiff 我想使用Deriv用于计算函数对向量的导数 我写的 library numDeriv library Deriv h function x c 1 2 x grad h c 1 2 ok 1 1 2 dh De
  • 使 Console.ReadLine 始终位于最后一行

    我有一个用 C 编写的应用程序 它通过 while true 循环和 Console ReadLine 连续获取用户的命令 我也有各种后台操作通过控制台报告 查看这个简单的例子 class Program static void Main
  • 在单独运行的 Python 脚本之间传递数据

    如果我有一个正在运行的 python 脚本 带有完整的 Tkinter GUI 和所有内容 并且我想将它正在收集的实时数据 内部存储在数组等中 传递给另一个 python 脚本 那么最好的方法是什么 我不能简单地将脚本 A 导入脚本 B 因
  • TSQL 函数计算指定日期的 30 个工作日日期 (SQL Server 2005)

    TSQL 函数计算指定日期的 30 个工作日日期 SQL Server 2005 输入参数为日期和工作日数 输出将是计算日期 这不包括周六 周日 节假日和休息日 即 如果假期适逢周末 但在假期后的周五或周一举行 对于假期 我们有一个表格 其
  • EF Code First - 一对一可选关系

    我想使用 EF Code First 在现有数据库中映射可选的一对一关系 简单架构 User Username ContactID Contact ID Name 显然 ContactID 加入到 Contact ID 中 ContactI
  • 动态和/或递归读取并合并两个 Yaml 文件

    这个问题已经得到解答 用于合并两个 yaml 的顶级 map string interface 值 但是是否可以合并两个yaml文件 A 没有定义结构体和 B 具有多个未知级别的嵌套 我尝试解组到同一个空白界面 但覆盖 yaml 完全被擦除
  • 自定义 JUnit 报告?

    我正在使用 ant 任务 junit 和 junitreport 来运行我的 JUnit 测试并在最后生成报告 gt 单元测试结果 是否有一些简单的方法可以以某种方式扩展此输出以获得报告中显示的更多信息 例如 添加一个附加列 其中包含指向测
  • ListView 绑定中的 SelectedItem

    我是 WPF 新手 在我的示例应用程序中 我使用 ListView 来显示属性的内容 我不知道如何将ListView中的SelectedItem绑定到属性 然后绑定到TextBlock 窗口 xaml
  • 我可以让 WatchKit 应用程序在 Apple Watch 的后台运行吗?

    我想知道是否有办法让我的 WatchKit 应用程序在后台运行 或者我是否可以对其进行编程以在满足特定条件后启动 即从非活动状态转移到活动状态 当 WK 应用程序打开并处于活动状态时 我的应用程序可以完美运行 甚至当 iPhone 处于睡眠
  • MySQL:多行作为逗号分隔的单行

    我有两个表 DISH 和 DISH HAS DISHES Dish 表包含所有菜肴 Dish has dishes 表与 Dish 表具有一对多关系 IE 一个菜可以有多个菜 例如 DISH dish id dish name 1 dish
  • 获取一行sql中具有最大值的列名

    我的数据库中有一个表 其中存储新闻文章的类别 每次用户阅读文章时 都会增加相关列中的值 像这样 现在我想执行一个查询 在其中可以获得每条记录的 4 个最高值的列名 例如 对于用户 9 它将返回 我尝试了很多事情 搜索了很多 但不知道该怎么做
  • 在具有有序因子的 data.frame 上使用 apply 与排名和顺序时出现奇怪的行为

    我发现了一些奇怪的行为apply 假设我有一个任意有序变量矩阵 set seed 4 x lt ordered sample 1 10 size 4 replace T y lt ordered sample 1 10 size 4 rep
  • 类似 Ruby 的问题:让这个函数更短(ActionScript 3)

    我刚刚编写了这段极其冗长的代码 将 2 这样的数字转换为 02 您能否缩短此功能 保持功能 public static function format n int minimumLength int String var retVal St
  • 迭代到大范围时出现 Python 内存错误

    total 0 x 2 32 for i in range x total total i print total 我得到了MemoryError循环到某个范围时2 32 有没有办法在不耗尽内存的情况下进行迭代 This is what h
  • typescript 中 switch 的替代方案

    我正在尝试为我的开关盒寻找任何替代方案 因为它很长 我有嵌套的开关盒 看起来像这样 switch currentTab case pending switch status case approved case denied break c