typescript 的常用方式(一)

本文详细介绍了Vue2和Vue3中设置props的默认值方法,包括不设置、分离模式和组合模式,并讨论了二维数组和多层嵌套数据的定义,以及在form表单中的使用实例,重点讲解了索引签名在类型定义中的作用。
摘要由CSDN通过智能技术生成


前言

提示:


一、绑定props 默认值的方式:withDefaults

1.vue2 的props设置默认值

 props: {
   // 基础的类型检查 (`null` 和 `undefined` 会通过任何类型验证)
   propA: Number,
   // 多个可能的类型
   propB: [String, Number],
   // 必填的字符串
   propC: {
     type: String,
     required: true
   },
   // 带有默认值的数字
   propD: {
     type: Number,
     default: 100
   },
   // 带有默认值的对象
   propE: {
     type: Object,
     // 对象或数组默认值必须从一个工厂函数获取
     default: function () {
       return { message: 'hello' }
     }
   },
   // 自定义验证函数
   propF: {
     validator: function (value) {
       // 这个值必须匹配下列字符串中的一个
       return ['success', 'warning', 'danger'].indexOf(value) !== -1
     }
   }
 }

2.vue3 的props设置默认值

(1) 不设置默认值的写法

interface Props {
  name: string,
  age: number,
  address: string,
}
const props = defineProps<Props>()

(2) 设置默认值的写法(分离模式)

interface Props {
 name: string,
 age: number,
 address: string,
}
const props =  withDefaults(defineProps<Props>(),{
 name: '张三',
 age: 18,
 address: '中国义务',
})

(3) 设置默认值的写法(组合模式)

const props = withDefaults(
  defineProps<{ 
    name: string, 
    age?: number 
    address?: string 
  }>(),
  {
    name:'张三',
    age: 18,
    address:'中国义务',
  }
);

二、定义一个二维数组的数据类型

比如:级联里面的的[[1],[2],[3]]这种 也就是数组里面嵌套number类型的数组

type numberArray = Array<number>
// ts中定义参数
export function get<T>(params: {
  levelIds?: Array<numberArray>
}) {}
let levelIds: numberArray[] = ref([[1]]). // vue 中

三、一个普通的form表单可能碰到的多层嵌套数据定义类型

type formType = {
    value1: string // 定义基本数据类型
    value2: { key1: string; key2: string }[] // 定义数组里面对象的属性
    // 数组里面的对象,对象里面是对象的
    value3: {
      examTopicRecordId: number // 对象里面的基本数据
      errorReasonList: [] // 对象里面的数组
      answers: string[] // 对象里面的字符串数组
      // 对象里面的对象
      scoringRecordMap: { 
      	// [prop: string]  定义对象的key是string类型的,后面的是对象的属性名
        [prop: string]: {
          scoring: string, // 评分
          errorReason: string[], // 错误原因
          remark: string, //备注
        }
      }
    }[]
    [key: string]: any // 这是一个索引签名
  }
const formForm: formType =reactive({...})

重点:

重点1: 属性对象里面的 [prop: string]: {}是索引签名的一种表示方式,用户描述一个对象的索引类型和索引值的类型。
重点2: == [key: string]: any 是索引签名的一中表示方式,它表示这个对象可以有任意名称的属性,这些属性的值可以是任何类型(比如你在formForm中定义了value1,value2,value3以外使用了value4也不会报错,提供了极大的灵活性)==
在这里插入图片描述

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值