V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
kensoz
V2EX  ›  前端开发

请问一个关于 vue3 和 typescript 的两个非常基础的问题

  •  
  •   kensoz · 2022-03-28 10:27:00 +08:00 · 1748 次点击
    这是一个创建于 973 天前的主题,其中的信息可能已经有所发展或是发生改变。

    都是基础的问题,不过怎么查也没有查到想要的答案,还请各位大佬轻喷

    问题一

    假设我有一个 ts 对象接口,然后我初始化了一个 reactive
    这里我并没有使用?(可选属性)因为我知道所有的属性都是必要的

       interface TEST {
          id: number
          name: string
       }
    
       let test = reactive<TEST>() // 报错
    

    我知道没有用可选属性就必须初始所有的属性,所以报错
    但是假如这是一个拥有大量属性的对象,那我也必须初始所有属性?
    比如一个 vue 文件有 2 个 reactive ,一个包括 20 个属性,全部初始化出来感觉很占地方
    请问有没有什么小技巧之类的方法?

    问题二

    还是上面的接口,我初始化了 reactive
    这里面我给了数字类型的 id 一个初始值 0

       let test = reactive<TEST>({
          id: 0,
          name: '',
       })
    

    初始化数字类型,必须要填入数字
    请问如果我想在 id 为 0 时(初始时或者其他不需要表示的时候)不显示
    只有在逻辑中判断这一种方法嘛?有没有什么 ts 的声明技巧?

    5 条回复    2022-03-28 14:17:29 +08:00
    dcalsky
        1
    dcalsky  
       2022-03-28 11:37:03 +08:00   ❤️ 1
    1: 无,必须手动写默认值
    2: 最好手动判断

    结论:当你想用奇技淫巧来搞一波小操作的时候,就是在给未来留坑。
    gadfly3173
        2
    gadfly3173  
       2022-03-28 11:44:51 +08:00   ❤️ 1
    用了 ts 的话就是为了享受类型定义带来的便利,自然也需要承受类型定义带来的麻烦。用 ts 的时候不要想着用很多 js 里的奇淫技巧,把它当成一般的静态类型语言,比如 java c++之类的,用起来就没那么多问题了
    yukYaoT
        3
    yukYaoT  
       2022-03-28 14:03:53 +08:00   ❤️ 1
    默认值可以使用 断言 指定
    const test = reactive({}) as TEST
    TWorldIsNButThis
        4
    TWorldIsNButThis  
       2022-03-28 14:07:17 +08:00 via iPhone
    实际上 js 里没指定就是未定义行为
    kensoz
        5
    kensoz  
    OP
       2022-03-28 14:17:29 +08:00
    @yukYaoT 谢谢,这确实就是我想要的效果
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3324 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 42ms · UTC 12:16 · PVG 20:16 · LAX 04:16 · JFK 07:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.