当前位置: 首页 > 知识库问答 >
问题:

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

公冶安怡
2023-12-26

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

///老代码 返回一个 number 类型的1function 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 类型断言来帮我简化这些地方呢?

共有2个答案

赏光霁
2023-12-26

直接统一成string

function getVersion() {  return `${(newFn ?? oldFn)()}`}if (appVersion === '1') { do something }
申屠英韶
2023-12-26

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

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

 类似资料:
  • 问题内容: 我在Javascript中有一组全局计数器变量: 等等 然后,我有了一个Javascript函数,该函数接受一个映射到这些全局计数器的“索引”数字。在此函数内部,我需要使用传递给该函数的“索引”值来读写这些全局计数器。 我希望它如何工作的示例,但当然根本不起作用: 我希望我要实现的目标是明确的。如果没有,我会尽力澄清。谢谢。 编辑说明: 我不是要增加计数器的名称,而是要增加计数器包含的

  • 可能重复: Java中的动态变量名: 假设我有一个字符串,如下所示。 现在,我想创建一个字符串,但是字符串的变量将被称为“Hello”。为了使字符串名为“Hello”,我必须访问string以获取名称“Hello”,这样我就可以将其用作变量名。下面是我想看的。 感谢您的努力,请尝试向我解释,因为我是Java初学者D

  • 我是java新手,我不知道如何从另一个类访问变量 我正在尝试编写一个代码来发送带有未存储在本地的附件的邮件。我想访问SendMail类中ExcelFile类中编写的变量 如何在另一个类中访问excelFileAsByte并发送邮件而不将其存储在本地。我可以使用addBodyPart和ByteArrayResource将文件添加为附件吗。

  • 问题内容: 我正在用while循环编写奇数或偶数程序。我试图弄清楚如何以某个数字结束while循环。现在我有1个继续循环,并尝试使2终止循环。还试图弄清楚如果用户键入除字母/单词之类的数字以外的任何内容,如何终止程序。 问题答案: 您可以尝试的另一件事是,您可以继续要求用户输入正确的输入,而不是退出程序,只有在输入正确的输入后才继续操作。我不知道您的要求是什么,但是如果您想通过良好的代码习惯进行操

  • 我有一个类Main(它具有公共静态void Main(String[]args))和另一个类MyDocument。 Main类中存在一个变量,我想从MyDocument类中的函数alphabetOccurrence()访问该变量。我该怎么做呢?我不想用它作为静态变量。任何修改只能在函数中进行,其余的代码应该保持不变。