版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
《通信软件前端开发》Pinia+TypeScript状态类型定义课程导入如何定义响应式状态(State)的类型?如何定义计算属性(Getters)的返回值类型?如何定义方法(Actions)的参数和返回值类型?定义State的类型//stores/counter.tsimport{defineStore}from'pinia'import{ref,computed}from'vue'//第一步:定义状态的接口//推荐使用interface,因为它更清晰,且能被扩展exportinterfaceCounterState{count:numbername:stringitems:string[]//演示数组
user:{//演示嵌套对象
id:numberrole:'admin'|'user'}|null//可能为null}代码演示
exportconstuseCounterStore=defineStore('counter',()=>{//第二步:给ref传递泛型参数
//写法1:显式泛型(推荐,更严格)
constcount=ref<number>(0)//写法2:类型推断(如果初始值能准确推断)
constname=ref('defaultname')//自动推断为string//复杂类型的定义
constitems=ref<string[]>([])//对象或null的定义
constuser=ref<CounterState['user']>(null)//或者直接从接口复用:constuser=ref<{id:number;role:'admin'|'user'}|null>(null)//...后续代码})
pinia的安装pnpm/npmlistpiniapnpm/npminstallpinia定义Getters的类型exportconstuseCounterStore=defineStore('counter',()=>{//...state定义
//1.自动推断(最常用)
constdoubleCount=computed(()=>count.value*2)//鼠标悬停查看,类型自动推断为ComputedRef<number>//2.手动指定类型(当推断不准确或需要约束时)
constisAdmin=computed<boolean>(()=>{//假设逻辑复杂,我们强制返回布尔值
returnuser.value?.role==='admin'})//3.依赖其他getter或复杂逻辑
constcountInfo=computed(()=>{if(count.value===0)return'零'if(count.value>0)return`正数:${count.value}`return`负数:${count.value}`//TS推断为string})return{count,name,items,user,doubleCount,isAdmin,countInfo}})
定义Actions的类型exportconstuseCounterStore=defineStore('counter',()=>{//...state定义
//1.同步Action:定义参数类型
functionincrement(amount:number){//参数必须是numbercount.value+=amount}//2.修改复杂类型
functionsetUserRole(role:'admin'|'user'){//参数只能是这两个字符串
if(user.value){user.value.role=role}}
//3.异步Action:定义返回类型(Promise)asyncfunctionfetchUserData(userId:string):Promise<{success:boolean}>{try{//模拟API调用
constresponse=awaitfetch(`/api/users/${userId}`)constdata=awaitresponse.json()//假设更新stateuser.value={id:data.id,role:data.role}return{success:true}}catch{return{success:false}}}//4.多个参数的类型定义
functionupdateItem(index:number,newItem:string):void{if(items.value[index]){items.value[index]=newItem}}return{/*state和getters*/increment,setUserRole,fetchUserData,updateItem}})
在组件中使用&常见陷阱<scriptsetuplang="ts">import{useCounterStore}from'@/stores/counter'conststore=useCounterStore()//✅类型安全:自动补全count,name,doubleCountconsole.log(store.count)//✅参数类型检查:只能传numberstore.increment(5)//✅返回值类型检查store.fetchUserData('123').then(res=>{console.log(res.success)//✅类型安全})//❌错误示例:如果试图给只读的getter赋值//store.doubleCount=3//TS报错:无法分配到"doubleCount",因为它是只读属性。//❌错误示例:传递错误参数类型//store.setUserRole('superAdmin')//TS报错:类型"superAdmin"的参数不能赋给类型"admin"|"user"的参数。</script>
在组件中使用&常见陷阱//❌不要这样const{count,increment}=useCounterStore()//count会失去响应性//✅应该这样import{storeToRefs}from'pinia'conststore=useCounterStore()const{count,doubleCount}=storeToRefs(store)//保持响应性和类型const{increment}=store//action可以直接解构
课堂总结S
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 机械制造工艺师产品加工精度控制绩效评定表
- 创意美术班:描绘美好世界小学主题班会课件
- 网络安全防护技术手册与漏洞扫描指南
- 警钟长鸣预防网络诈骗小学主题班会课件
- 关于2026年战略合作伙伴会议纪要的确认函(3篇)范文
- 危险化学品生产单位车工运行操作安全操作规程
- 2026执业医师技能考试真题+答案完整版
- 基于物联网技术的仓储管理系统升级改造计划
- 制造业工厂生产车间主任生产效率绩效评定表
- 2026年全国专利代理师资格考试专利代理实务历年参考题库含答案
- 《模具材料的分类》课件
- 一厂多租(厂中厂)厂区安全生产管理标准
- FZT 50035-2016 合成纤维 长丝电阻试验方法
- 广东省地质灾害危险性评估实施细则(2023年修订版)
- NB-T 47013.1-2015 承压设备无损检测 第1部分-通用要求
- 2023年合肥经济技术开发区招考聘用社区工作者62人模拟备考预测(共1000题含答案解析)综合试卷
- 医学科研设计:第一章 绪论
- 学校“五育并举五育融合”工作实施方案
- 铁路基本建设工程设计概(预)算编制办法-国铁科法(2017)30号
- AS9100D-2016手册程序推荐
- 机械租赁施工公司机构设置
评论
0/150
提交评论