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

2022-03-28 10:27:00 +08:00
 kensoz

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

问题一

假设我有一个 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 的声明技巧?

1779 次点击
所在节点    前端开发
5 条回复
dcalsky
2022-03-28 11:37:03 +08:00
1: 无,必须手动写默认值
2: 最好手动判断

结论:当你想用奇技淫巧来搞一波小操作的时候,就是在给未来留坑。
gadfly3173
2022-03-28 11:44:51 +08:00
用了 ts 的话就是为了享受类型定义带来的便利,自然也需要承受类型定义带来的麻烦。用 ts 的时候不要想着用很多 js 里的奇淫技巧,把它当成一般的静态类型语言,比如 java c++之类的,用起来就没那么多问题了
yukYaoT
2022-03-28 14:03:53 +08:00
默认值可以使用 断言 指定
const test = reactive({}) as TEST
TWorldIsNButThis
2022-03-28 14:07:17 +08:00
实际上 js 里没指定就是未定义行为
kensoz
2022-03-28 14:17:29 +08:00
@yukYaoT 谢谢,这确实就是我想要的效果

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/843306

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX