Vue3 ts环境下的PropType

 简介

      在Typscript中,我们可以使用PropType进行类型的推断与验证。在日常的开发中我们常常会遇到下面这样的场景:

        我们通过request请求从服务端获取了一条数据,数据是个Array的格式,Array中的每个元素又是一个对象,像下面这样的数据

const intro = [{title: "标题一",description: "描述一",totalNum: 1},{title: "标题二",description: "描述二",totalNum: 2},{title: "标题三",description: "描述三",totalNum: 3},
]

        此时我们如果封装几个方法在ts文件中,用于处理这样的服务端数据,在传参的过程中,我们可能用一个Array类型去接这个intro数组,但可能项目多人开发,别人在使用这个数组时就不了解这个Array中具体每个元素是什么类型,此时我们使用PropType。

使用

        一个小栗子,在非setup语法糖的环境中使用PropType

export interface CompProps {title: string;description: string;totalNum: number;
}
<template><div class="backbox"><div class="introbox"><div v-for="item in intro"><div class="intro">title = {{ item.title }}</div><div class="intro">description = {{ item.description }}</div><div class="intro">totalNum = {{ item.totalNum }}</div></div></div></div>
</template>
<script lang="ts">
import { PropType, defineComponent } from "vue";
import { CompProps } from './prop';export default defineComponent({name: "Comp",props: {intro: {type: Array as PropType<CompProps[]>,required: true},}
})
</script>
<style lang="less" scoped>
.introbox {background-color: antiquewhite;padding: 20px;.intro {display: inline-block;padding: 20px;margin: 10px;background-color: silver;}
}
</style>
<template><div><h2>PropType属性的类型验证</h2><div><Comp :intro="intro"></Comp></div></div>
</template>
<script setup lang="ts">
import Comp from './component/index.vue';const intro = [{title: "标题一",description: "描述一",totalNum: 1},{title: "标题二",description: "描述二",totalNum: 2},{title: "标题三",description: "描述三",totalNum: 3},
]
</script>
<style></style>

        当我们在上边这段代码的文件中,使用鼠标停在Comp元素上时,此时vscode给出的提示是下面这张图里的样子 :

        可以看到intro不是个Array类型,而是PropType<CompProps[]>类型。 

一个小栗子,在setup语法糖中使用PropType

export interface CompNum {num: number;id: number;
}
<template><div class="backbox"><div class="btnbox" v-for="num in numbs"><div class="btn" :id="String(num.id)" @click="buttonEvent($event)">{{ num.num }}</div></div></div>
</template>
<script setup lang="ts">
import { PropType, ref } from 'vue';
import { CompNum } from './prop';const props = defineProps({nums: {type: Array as PropType<CompNum[]>,default: []}
});
const emits = defineEmits(['update:nums']);
const numbs = ref(props.nums);
const buttonEvent = (event: any) => {let index = event.target.id;let arr = numbs.value;arr[index].num++;numbs.value = arr;emits('update:nums', numbs);
}
</script>
<style scoped lang="less">
.btnbox {display: flex;flex-direction: row;background-color: cadetblue;
}
.btn{display: inline-block;padding: 25px 40px 25px 40px;margin: 10px 40px 10px 20px;background-color: aquamarine;text-align: center;
}</style>
<template><div><h2>PropType属性的类型验证</h2><div><Btns v-model:nums="numsRef"></Btns></div></div>
</template>
<script setup lang="ts">
import { ref, watch } from 'vue';
import Btns from './component/button.vue';const intro = [{title: "标题一",description: "描述一",totalNum: 1},{title: "标题二",description: "描述二",totalNum: 2},{title: "标题三",description: "描述三",totalNum: 3},
]
let one = { num: intro[0].totalNum, id: 0 };
let two = { num: intro[1].totalNum, id: 1 };
let three = { num: intro[2].totalNum, id: 2};
const nums = [one, two, three];
const numsRef = ref(nums);watch(() => numsRef.value,(value) => {console.log("newValue = ", value);},{deep: true}
);</script>
<style></style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/623816.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

EDI是什么:EDI系统功能介绍

EDI全称Electronic Data Interchange&#xff0c;中文名称是电子数据交换&#xff0c;也被称为“无纸化贸易”。EDI实现企业间&#xff08;B2B&#xff09;自动化通信&#xff0c;帮助贸易伙伴和组织完成更多的工作、加快物流时间并消除人为错误。 目前国内企业实现EDI通信大多…

判断位数、按位输出、倒序输出(C语言)

一、运行结果&#xff1b; 二、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;int number 0;int i 1;int m 0;int z 0;int z1 0, z2 0, z3 0, z4 0;//提示用户&#xff1b;printf("请输…

Python疑难杂症(17)---介绍Python的pandas模块特点、安装以及series的创建和元素值的获取等。对于一维数据和使用有了初步的概念

1、定义 什么是Pandas&#xff1a;Pandas是Python中用于数据分析和挖掘的基础模块&#xff0c;它提供了丰富的功能和方法&#xff0c;使用 Pandas 包可以完成数据读入、数据清洗、数据准备、图表呈现等内容&#xff0c;使普通的非数据专业人员也能够处理和分析大型数据集&…

Kotlin从0到1,让你一周快速上手!!

声明 大家好&#xff0c;这里是懒羊羊学长&#xff0c;如果需要pdf版以及其他资料&#xff0c;请加入群聊。群里每天更新面经、求职资料&#xff0c;经验分享等&#xff0c;大家感兴趣可以加一下。 Kotlin 声明1.Kotlin基础2. Kotlin函数3.Kotlin进阶4.Kotlin集合5.Kotlin高…

【JavaSE】搞定String类

前言 本篇会细致讲解String类的常见用法&#xff0c;让小伙伴们搞定String类~ 欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xff0c;欢迎指出~ 目录 前言 常用的三种字符串构造 字符串长度length 字符串比较 比较 比较字符串的内容equals…

Mac版2024 CleanMyMac X 4.15.2 核心功能详解 cleanmymac这个软件怎么样?cleanmymac到底好不好用?

近些年伴随着苹果生态的蓬勃发展&#xff0c;越来越多的用户开始尝试接触Mac电脑。然而很多人上手Mac后会发现&#xff0c;它的使用逻辑与Windows存在很多不同&#xff0c;而且随着使用时间的增加&#xff0c;一些奇奇怪怪的文件也会占据有限的磁盘空间&#xff0c;进而影响使用…

HTTP协议安全传输教程

HTTP协议有多个版本&#xff0c;包括但不限于HTTP/0.9、HTTP/1.0、HTTP/1.1、HTTP/2和HTTP/3。这些版本各自具有不同的特点和改进&#xff0c;以适应网络技术的发展和满足不同的需求。例如&#xff0c;HTTP/1.0使用文本格式传输数据&#xff0c;简单易用且兼容性好&#xff0c;…

用户相关的配置文件

1.新建用户的配置文件从哪里来的&#xff1f; 在Linux操作系统中都有一个默认行为&#xff0c;当在Linux操作系统中新建用户时&#xff0c;都会在/home/用户名 也就是新建用户的家目录中配置三个隐藏文件 分别是.bash-logout .bash-profile .bashrc 如上图所示&#xff…

webIDE jupyternotebook中添加虚拟环境

困扰了我好久啊啊啊终于可以了&#xff0c;好了步入正题&#xff1a; 首先参考这个博客 指路 但是有一些错误&#xff0c;就是我添加我的虚拟环境时显示权限不够 我就在这一步前面加上了sudo python -m ipykernel install --nameyour_env_name(虚拟环境名)但是又显示 sudo: p…

novel-plus文件部分

环境配置。windows下需要将application-dev.yml添加盘符&#xff0c;固定路径 在FileController中&#xff0c;存在任意文件上传&#xff0c;也就是在 存在问题&#xff0c;确实是任意文件上传&#xff0c;任意文件都可以上传&#xff0c;但是上传jsp等文件时&#xff0c;会…

Webrtc 信令服务器实现

webrtc建联流程图 由上图可知&#xff0c;所谓的信令服务器其实就是将peer的offer/candidate/answer传给对端而已。这样的话实现方式就有很多种了&#xff0c;目前普遍的方式HTTP/HTTPS&#xff0c;WS/WSS。像webrtc-demo-peerconnection就是实现HTTP这种方式。本文使用WS&…

为什么那么多人喜欢Python?学习Python能为我们带来哪些优势?

Python是现在最火的编程语言&#xff0c;没有之一。那么&#xff0c;相对于其他语言&#xff0c;为什么那么多人喜欢Python&#xff1f;学习Python能为我们带来哪些优势&#xff1f;今天&#xff0c;小编就来和大家探讨一下&#xff01; 1、如果想成为一名程序员的话&#xff…