【TS】项目随记

关键代码

CompostionAPI

给组件实例声明类型 ⭐

使用说明:在导入组件放入 <InstanceType<typeof xxx>>,即可获得该组件的类型

好处:避免误写组件方法时报错,有代码提示

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

给ref声明类型

一般不确定的值才限制类型,如果值是确定的就直接写

在这里插入图片描述

自定义组件参数类型 ⭐

限制数组里面每个元素的类型(对象同理)

通过 propType 可以给数组的每个元素声明类型,它接收一个泛型,将定义好的元素类型传入即可

步骤:从vue里面导入类型 propType,通过 as 进行类型断言

  1. 在 type.ts 里面编写数组元素的类型

    在这里插入图片描述

  2. 导入类型并声明

    在这里插入图片描述

    参数必须是数组,并且数组里面的元素有类型要求

自定义组件配置声明及使用 ⭐

首先在组件目录下的 types/index.ts 下编写组件需要的类型

在这里插入图片描述

自定义组件的类型都统一编写到这里

在这里插入图片描述

将组件的配置编写到配置文件:

在这里插入图片描述

导入并return,通过v-bind直接绑定即可

在这里插入图片描述

通过 v-bind 可以将对象上的所有属性传入到组件

在这里插入图片描述

自定义组件表单双向绑定实现

类型文件

在这里插入图片描述

配置文件

在这里插入图片描述

User.vue 定义如下,将其传给子组件

在这里插入图片描述

在这里插入图片描述

子组件接收,将配置列表进行遍历,获取到field属性,然后直接赋值

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

很多公司就是这样做的,但是最好不要修改子组件的props属性,违背了单向数据流的设计原则

如果开启了eslint它会有警告,可以通过eslint的配置文件把它关掉

在这里插入图片描述

自定义组件表单双向绑定实现(优化)⭐

这个版本遵守单向数据流

在这里插入图片描述
自定义组件双向绑定默认传入的是 modelValue

在这里插入图片描述

自定义组件双向绑定默认发送事件的是 update:modelValue

在这里插入图片描述

下面写法是无效的:

然后这样写,但这样和原来直接引用modelValue的原理是一样的,并且set根本就不会触发

但是修改可以修改成功,这是因为get本质拿到的还是modelValue,对modelValue属性赋值,还是会影响props属性

在这里插入图片描述

应该这样写:

不要用reactive了,因为reactive在子组件双向绑定的时候多少有点问题,改用ref

在这里插入图片描述

然后重点来了,

首先,还是用 ref 对 props 传进来的属性进行一个解构,这样就和props属性脱离的关系

把原来的计算属性删掉,改用watch监听,通过emit把最新的值发送出去

写法一:

在这里插入图片描述

写法二:

在这里插入图片描述

为什么用watch而不用computed呢?

也可这样写,但这样写会有递归问题,所以还是推荐用watch

在这里插入图片描述

插件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

app.use一个function,那么这个function默认传入的就是app

Echarts

在这里插入图片描述
声明options类型

在这里插入图片描述

封装使用:

在这里插入图片描述

在这里插入图片描述

setup

定义属性

  1. js类型
    在这里插入图片描述

  2. ts类型

    方法一

    在这里插入图片描述
    方法二(推荐)

    在这里插入图片描述
    默认值
    在这里插入图片描述 在这里插入图片描述

Server

接口添加类型注解

  1. 创建type.ts定义类型

    在这里插入图片描述

  2. 导入类型

    在这里插入图片描述

给返回的结果声明类型

  1. 在type.ts文件里面,根据数据返回结果定义类型

    好处:有提示,避免误写

    在这里插入图片描述

    前者根据返回数据格式进行定义,后者是axios返回数据的固定格式,使用的时候直接传这个类型就好

  2. 导入类型,给post定义泛型,它会将类型添加到返回的结果上

    在这里插入图片描述

  3. 然后调用接口就有提示:

    在这里插入图片描述

返回结果比较复杂时的处理方式

  1. 直接用any(推荐)

  2. 用工具转 https://json2ts.com/(比较繁琐)

在这里插入图片描述

Store

state声明类型

默认会类型推导,但是定义泛型可以限制state里面的类型,更安全

在这里插入图片描述

这里的IRooteState可以放入 type.ts 文件里面导出使用,方便管理
注意:state增加属性了以后,接着就是给type.ts文件定义这个属性的类型

在这里插入图片描述

模块声明类型

  1. 定义泛型,并传入需要的两个类型

    在这里插入图片描述

    在这里插入图片描述

  2. 导入模块并注册

    在这里插入图片描述

类型文件统一管理

当类型比较多的时候可以统一放到相应模块 type.ts 里面然后导出

在这里插入图片描述

actions声明类型

在这里插入图片描述
在这里插入图片描述

实例声明类型 ⭐

写法一:(缺点:1. 拿不到子模块数据 ,2. 需要引入类型)

给useStore声明类型了以后,这样 store.state.xxx. 时就会有提示,没有声明默认就是any

在这里插入图片描述

但这样只使用于根模块,如果有子模块还是会报错:

在这里插入图片描述

写法二:(推荐)⭐

  1. 在store/index.ts里面导出一个自己的useStore,并给返回值声明类型

    在这里插入图片描述
    在这里插入图片描述

    这个Store是一个泛型,需要传入一个类型指明返回值的类型,指明了以后就会有提示,这里暂时用any

  2. 在需要的地方导入

    在这里插入图片描述

    此时store的类型是any

  3. 在 types.ts 编写 useStore 的返回值类型

    在这里插入图片描述

    IStoreType 包括 IRootState 和 IRootWithModule 的类型(交叉类型可以将两个接口结合在一起)

  4. 导入编写好的类型

    在这里插入图片描述
    在这里插入图片描述
    到这里还没有函数体,然后进行函数体的实现

    在这里插入图片描述
    在这里插入图片描述

  5. 重复第 2 步的步骤, store.state.login. 发现就有提示了

    在这里插入图片描述

模块实际应用

  1. 定义模块

    回顾:Module里面有两个泛型,第一个是子模块state的类型,第二个是跟模块state的类型

    在这里插入图片描述

  2. 创建 types.ts,编写类型

    原则:如果比较复杂的类型就直接写any

    在这里插入图片描述

  3. 声明类型

    在这里插入图片描述

  4. 注册子模块

    在这里插入图片描述
    在这里插入图片描述

  5. 为了让模块被引用的时候有模块的提示,可以在 types.ts 里面添加相应模块类型

    在这里插入图片描述

请求数据应用

  1. 编写请求接口

    接口的请求方式有一个泛型,默认是any,你可以传入数据返回的类型

    1. 不给返回值类型:

      在这里插入图片描述

    2. 给返回值类型:

      在这里插入图片描述
      在这里插入图片描述

  2. 导入接口,并请求数据

    在这里插入图片描述
    在这里插入图片描述

    如果接口没有声明返回值类型,就没有提示

Router

给routes声明类型

声明了以后就有代码提示

在这里插入图片描述

Uitils

本地保存工具

在这里插入图片描述

根据菜单映射路由

在这里插入图片描述
在这里插入图片描述

使用:如果匹配到 /main 路径,那么就跳转到第一个菜单页面

在这里插入图片描述

在这里插入图片描述

根据路径匹配当前菜单

根据当前路径在映射列表里面进行匹配,查找出当前菜单,然后返回

在这里插入图片描述

拿到当前菜单,拿到里面的id

在这里插入图片描述

生成面包屑

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

使用计算属性是为了当路径在发生变化的时候,重新渲染面包屑

总结

  1. 自定义组件props属性声明类型时,如果不好判断传入的值,就直接写成any
  2. 接口返回值声明类型时,如果不好判断返回值比较复杂,就直接写成any

问题

state不能用中括号获取

原因分析:state有一个确定的类型,所以不允许你这样获取
在这里插入图片描述

在这里插入图片描述

对象中括号赋值

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值