首页 > 其他分享 >vue3中关于指定props的复杂ts类型

vue3中关于指定props的复杂ts类型

时间:2024-07-10 14:53:07浏览次数:8  
标签:ItemInterface PropType vue3 ts 指定 props 类型 currentItem

如果要对props的数据进行指定类型, 基本类型可以直接使用类型约束,复杂类型可以使用PropType进行约束

interface ItemInterface {
  title: string
  code: string
  status: number
  icon: string
}
const props = defineProps({
  type: String,
  userId: String,
  currentItem: {
    type: Object as PropType<ItemInterface>, // 使用 PropType 指定类型
    default: () => ({})
  }
})

来自gpt的解释:
解析说明:

  1. ItemInterface 接口: 定义了 currentItem 属性期望的对象结构,包括 title, code, status, icon 四个字段,每个字段的类型都是 string 或 number。

  2. currentItem 的定义:

使用 PropType 明确告诉 TypeScript,currentItem 应该是 ItemInterface 类型的对象。
Object as PropType 是一个类型断言,用来强制指定 currentItem 的类型为 ItemInterface。

  1. 默认值:

default: () => ({}) 指定 currentItem 的默认值为空对象,这符合 Vue 3 中 props 的默认值设定方式。

为什么这样做是好的选择?
  1. 类型安全: 使用 PropType 可以确保在组件使用 currentItem 属性时,只接受符合 ItemInterface 接口定义的对象。

  2. 清晰明了: 在 Vue 3 组件中,使用 PropType 显式指定 props 的类型,使得组件的使用者和维护者能够清晰地了解每个 prop 的预期类型和结构。

  3. 可读性: 增强了代码的可读性和可维护性,特别是在较大的项目中,能够帮助团队成员更快速地理解和使用组件。

以上。

标签:ItemInterface,PropType,vue3,ts,指定,props,类型,currentItem
From: https://www.cnblogs.com/hjk1124/p/18294034

相关文章

  • 利用 ECharts 地图:实现纹理和图像的效果(上海json)
    注:shanghaiGeoJSON换为你需要的区域json<template><divref="mapContainer"style="width:100%;height:500px"></div></template>import*asechartsfrom'echarts';importshanghaiGeoJSONfrom'@/assets......
  • uniapp+vue3封装下拉框(支持单选、多选)
    子组件代码<template><viewclass="uni-select-dc"><viewref="select"class="uni-select-dc-select":class="{active:active}"@click.stop="handleSelect">......
  • 学习ArkTS遇到的的兼容与适配案例
    案例相册选择的API(如下)在Mate30上无法支持letphotoPicker=newpicker.PhotoViewPicker();photoPicker.select({}).then(()=>{});虽然在2024/06Mate30的系统已经可以更新到4.2版本但是仍旧无法使用此API,然而同是麒麟990芯片的P40是可以正常执行的官......
  • echarts——横坐标轴文字过长如何换行
    横坐标轴文字过长,想要换行实现如下效果具体实现代码如下:axisLabel:{show:true,interval:0,formatter:function(value){varret="";//拼接加\n返回的类目项varma......
  • POJ 3414 Pots
    题目链接:POJ3414【Pots】思路    对于每个A、B瓶的每个状态,使用结构体存储,同时pre存储操作前的状态的下标,方便回溯查询正确路径的操作,oper存储使用什么操作得到当前状态,operNumber存储到达当前状态需要几步。由于需要求的是最少的操作次数,所以使用BFS,依次增加操作次......
  • 设置DepthBufferBits和设置DepthStencilFormat的区别
    1)设置DepthBufferBits和设置DepthStencilFormat的区别2)Unity打包exe后,游戏内拉不起Steam的内购3)Unity2022以上Profiler.FlushMemoryCounters耗时要怎么关掉4)用GoodSky资产包如何实现昼夜播发不同音乐功能这是第394篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答......
  • mormot.core.threads--TSynThreadPool
    mormot.core.threads--TSynThreadPool{************面向服务器进程的线程池}TSynThreadPool=class;//前向声明TSynThreadPool类///定义了TSynThreadPool所使用的工作线程TSynThreadPoolWorkThread=class(TSynThread)protectedfOwner:TSynThreadPool;//......
  • react或vue中页面多个echarts,只有最后一个能自适应的处理方法
    页面多个echarts时,自适应绑定方式必须是addEventListenerwindow.addEventListener("resize",()=>{myChart.resize();myChart2.resize();})myChart,myChart2是echart实例   ......
  • ArcTs布局入门05——栅格布局(GridRow/GridCol)
    如果你也对鸿蒙开发感兴趣,加入“Harmony自习室”吧扫描下面的二维码关注公众号。1、概述栅格布局是一种通用的辅助定位工具,对移动设备的界面设计有较好的借鉴作用。主要优势包括:提供可循的规律:栅格布局可以为布局提供规律性的结构,解决多尺寸多设备的动态布局问题。通过将......
  • Vue2项目中的Bootstrap如何使用
    一.依赖导入利用npm导入依赖,具体版本号可以区Bootstrap官网查看 Bootstrap [email protected]二.导入包(注意Bootstrap的css和js文件需要单独引入)在vue项目目录下找到main.js文件,在里面引入Bootstrap的css和js文件,样例如下图所示。importVuefrom'vue'im......