TS 如何根据某个变量是否存在来约束另一个变量的类型?

场景再现:
由于我们 app 版本更新,有一个获取系统状态的函数进行了重构,为了兼容这个函数,我是这样设计代码的。(下面只是模拟场景的伪代码)

///老代码 返回一个 number 类型的1
function oldFn(){
return 1
}

///新代码 返回一个 sting 类型的 "1"
function newFn(){
return "1"
}

我在使用的地方是这样兼容的

function getVersion(){
    if(newFn){
    newFn()
    }
    else{
    oldFn()
    }
}

const appVersion =getVersion()

此时我的 appVersion 就是 string|number类型的值。我之前在用到版本信息判断的地方就需要大改

之前
if(appVersion===1){do something}

现在
if(appVersion===1||appVersion==="1"){do something})

有没有什么好的建议或者 TS 类型断言来帮我简化这些地方呢?

阅读 511
2 个回答
✓ 已被采纳

直接统一成string

function getVersion() {
  return `${(newFn ?? oldFn)()}`
}

if (appVersion === '1') { do something }

这种情况应该从源头去适配呀,你后面的appVersion===1||appVersion==="1"这种并不是很靠谱。
说白了就是之前没做好抽象,你要做适配的应该在getVersion函数,你要把返回值在这处理成统一格式才行。

除非有必要,做一次大的重构。重新定义class Version,否则就把所有的appVersion都在getVersion函数中把将格式统一。之前历史代码都不要修改。

推荐问题
logo
Microsoft
子站问答
访问
宣传栏