TypeScript在vue3中的应用(Ref和ComputedRef的应用)

首先,我承认,我vue3和ts都不是很熟。然后在使用过程中就发现了这样一个情况。

复制代码
const list: {isBoob: boolean; count: number;}[] = computed(() => {
  let arr: number[] = new Array(total.value).fill(0).fill(1, 0, boobNumber.value) // 初始化数组
  arr = arr.sort((a,b) => Math.random() - 0.5) // 随机排序
  return arr.map((item: number, index): {isBoob: boolean; count: number;} => {
    // 返回对象组成的数组
    return {
      isBoob: !item,
      count: index
    }
  })
})
// error:类型"ComputedRef<{ isBoob: boolean; count: number; }[]>"缺少类型"{ isBoob: boolean; count: number; }[]"的以下属性: length, pop, push, concat 及其他 29 项。

其实现在想来,提示也很明白了,list的类型是ComputedRef<{ isBoob: boolean; count: number; }[]>,但是我当时没搞懂ComputedRef是什么,所以懵住了。

这里介绍vue3的特点,vue3在定义响应式数据时,需要使用x = ref()包裹数据,计算数据需要x = computed()。使用的时候也需要用 x.value。

所以对于变量x来说,他的数据类型一定不是括号内的内容或者说value的类型。

而ts为了应对这种情况就有了Ref和ComputedRef,分别表示这两种响应式数据。

复制代码
x :Ref<number> = ref(10)

x :ComputedRef<number> = computed(() => x*2)
相关推荐
小时前端几秒前
谁说 AI 历史会话必须存后端?IndexedDB方案完美翻盘
前端·agent·indexeddb
wordbaby5 分钟前
TanStack Router 基于文件的路由
前端
wordbaby10 分钟前
TanStack Router 路由概念
前端
wordbaby12 分钟前
TanStack Router 路由匹配
前端
cc蒲公英13 分钟前
vue nextTick和setTimeout区别
前端·javascript·vue.js
程序员刘禹锡18 分钟前
Html中常用的块标签!!!12.16日
前端·html
sinat_3842410924 分钟前
OpenSpeedy 是一款开源免费的游戏变速工具
javascript
我血条子呢28 分钟前
【CSS】类似渐变色弯曲border
前端·css
DanyHope29 分钟前
LeetCode 两数之和:从 O (n²) 到 O (n),空间换时间的经典实践
前端·javascript·算法·leetcode·职场和发展
hgz071030 分钟前
企业级多项目部署与Tomcat运维实战
前端·firefox