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)
相关推荐
用户298698530146 分钟前
在 React 中实现 RTF 与 PDF、HTML 的文档转换实践
javascript·react.js·html
咖啡无伴侣6 分钟前
3. 从零搭建企业级 Monorepo 工程化模板:集成 Husky 9 + lint-staged
前端·架构
MetaLite13 分钟前
Java通用枚举驱动下拉框-元数据接口与前端契约
java·前端·状态模式
Json____16 分钟前
基于 Node + Vue3 的选课管理系统:从教务业务到全栈实践
前端·node·毕设·wwwoop.com
创新技术阁18 分钟前
FastapiAdmin 定时任务实现原理与新建任务实操指南
前端·后端·fastapi
3A Cloud22 分钟前
Huashu Design:把 AI Agent 变成一间以 HTML 为画布的设计工作室
前端·人工智能·html
你别说话了25 分钟前
Webpack 如何迁移重构到 Vite
前端·webpack·重构
catastrophe_zy27 分钟前
如何用 WebCodecs 在浏览器里实现高清录屏 —— 无插件、无水印、直接导出 MP4
前端·javascript·录屏
芳心粽伙饭30 分钟前
HTML第七章 表格标签
前端·html
我就是DaLing呀!30 分钟前
vue3 + 独立的数据管理 Store实现视频剪辑功能
前端·typescript·vue3·canvas·store