vuex4+typescript实现智能提示

本文介绍了如何在Vue3项目中利用typescript为Vuex实现智能提示。首先回顾了ts基础语法,如interface与type的区别,以及泛型、keyof、交叉类型等。接着,详细阐述了Vuex的模块管理和智能提示的实现方法,包括获取mutations、actions和getters的函数类型,构造带前缀的方法名,以及重写dispatch和commit方法以实现类型提示。最后,作者分享了自己的学习体会,指出typescript在提升开发体验方面的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

vue3已经被作为默认版本发布快三个月了,但是目前还没有使用vue3+ts独立开发过项目,刚好自己在后台系统方面涉猎较少,于是决定使用vue3+ts开发一个后台管理系统,在数据管理时,对于跨了很多层级的组件间的共享数据就采用vuex进行储存和获取,为了充分发挥ts的功能,决定实现在使用vuex调用方法时智能提示方法名,也算是督促自己多学学ts

个人学习笔记,欢迎指正

ts基础语法

既然作为学习笔记,当然要记录一下自己学到的一些ts语法(很基础的东西我就不再记录了)

interface vs type

interface 是一种约束或规范,通常用接口来定义对象的类型

interface Person{
    name:string,
    age:number,
    height?:number
}

let Yzh:Person ={
    name:"yzh",
    age:19
    //height由于接口加了?,所以可有可无,但是前两个属性必须有
} 

type(类型别名)用来给一个类型起一个新名字,可以同接口一样描述对象或函数,不同之处在于其还可以声明基本类型别名,联合类型,元组等类型

type Person{
    name:string,
    age:number
}

let Yzh:Person ={
    name:"yzh",
    age:19
} 

typeof vs keyof

typeof 操作符用来获取一个变量或者对象的类型

//对于不知道类型的变量,可以借助该操作符获取
import {useRoute} from "vue-Router";

const route =useRoute()
type RouteType =typeof route 

keyof操作符可以提取其属性的名称,返回一个联合类型(后续会提到)

type Person{
    name:string,
    age:number
}

type keys =keyof Person; //"name" | "age" 

泛型 && 泛型约束 && 泛型推断

泛型可以理解为在编译期间不确定方法的类型,在方法调用时,由程序员指定泛型具体指向什么类型

泛型的作用:通常解决类,接口,方法的复用性,以及对非特定数据类型的支持

//举一个应用场景,定义一个函数,接收什么一个任意类型的数据然后返回该数据
function backArg(arg:any):any{
    return arg
}
//貌似是实现了,但是有一个问题,该问题隐含的是接收类型和返回类型要一致,即设置any虽然实现了可以接收任意类型的参数但是不能保证接收类型与返回类型一致

function backArg<T>(arg:T):T{
    return arg
}
backArg<string>("success");
backArg<number>(200)
//即先借助<>定义一个泛型类型,然后在实际调用中根据不同情况我们传递给它相应类型 

一个常见的问题,获取一个object的某个属性值,但是我们获取时,编译器不知道该object类型是否有该属性就会报错

对于这种情况,如果我们知道object的具体属性,可以直接定义一个接口进行约束,就不会有相应问题,但问题如果不知道该object的属性值都有什么该怎么办,采用类型约束

const userInfo ={
    name:"yzh",
    age:19
}

function getKey(o:object,name:string){
    return o[name]; //Error:'string' can't be used to index type '{}'.
}

//采用类型约束
function getKey<T extends object,K extends keyof T>(obj:T,key:K):T[K]{
    return obj[key]
}
//keyof T为一个联合类型(设为U),K extends U表示K受U约束,可以简单理解为extends后的内容为前面泛型的接口
//即K需要为联合类型U中属性值的一种

//值得一提的是:这里的extends不同于面向对象的继承,而是表示一种约束关
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值