深度合并策略参数类型问题

来源:9-3 合并配置的设计与实现 - 配置合并策略(下)

许愿瓶啊

2020-08-20

function deepMergeStrat(val1: any, val2: any): any {
  if (isPlanObject(val2)) {
    return deepMerge(val1, val2)
  } else if (typeof val2 !== 'undefined') {
    return val2
  } else if (isPlanObject(val1)) {
    return deepMerge(val1)
  } else if (typeof val1 !== 'undefined') {
    return val1
  }
}

这里的深度合并策略如果不只是考虑 headers 的合并的话需要考虑参数的所有类型,而 deepMerge 接受的都是对象属性,这里第一个条件判断并不能保证 val1 val2 都是对象吧,如果 val1 是字符串的话这里的合并就会出问题,改成下面的代码是不是更合理点?

function deepMergeStrat(val1: any, val2: any): any {
  if (isPlanObject(val2)) {
    if (isPlanObject(val1)) {
      return deepMerge(val1, val2)
    } else {
      return deepMerge(val2)
    }
  } else if (typeof val2 !== 'undefined') {
    return val2
  } else {
    if (isPlanObject(val1)) {
      return deepMerge(val1)
    } else {
      return val1
    }
  }
}
写回答

1回答

ustbhuangyi

2020-08-21

你那么改也可以,不过考虑到这个 deepMergeStrat 是针对限定的场景,所以这么搞也行。

0
1
许愿瓶啊
非常感谢!
2020-08-21
共1条回复

下一代前端开发语言 TypeScript从零重构axios

课程从零开始重构功能完整的JS库,是学习造轮子的不二之选!

2631 学习 · 877 问题

查看课程