TypeScript与Vue

文章目录

  • TypeScript与Vue
    • defineProps与Typescript
    • defineEmits与Typescript
    • ref与Typescript
    • reactive与Typescript
    • computed与Typescript
    • 事件处理与Typescript
    • Template Ref与Typescript
    • 可选链操作符
    • 非空断言

参考链接:https://vuejs.org/guide/typescript/composition-api.html

vue3配合ts中,还需要额外安装一个vscode插件:Typescript Vue Plugin

defineProps与Typescript

目标:掌握defineProps如何配合ts使用

  1. defineProps配合vue默认语法进行类型校验(运行时声明)
// 运行时声明
defineProps({money: {type: Number,required: true},car: {type: String,required: true}
})
  1. defineProps配合ts的泛型定义props类型校验,这样更直接
// 使用ts的泛型指令props类型
defineProps<{money: numbercar?: string
}>()
  1. props可以通过解构来指定默认值
<script lang="ts" setup>
// 使用ts的泛型指令props类型
const { money, car = '小黄车' } = defineProps<{money: numbercar?: string
}>()
</script>

如果提供的默认值需要在模板中渲染,需要额外添加配置

https://vuejs.org/guide/extras/reactivity-transform.html#explicit-opt-in

// vite.config.js
export default {plugins: [vue({reactivityTransform: true})]
}

defineEmits与Typescript

目标:掌握defineEmit如何配合ts使用

  1. defineEmits配合运行时声明
const emit = defineEmits(['change', 'update'])
  1. defineEmits配合ts 类型声明,可以实现更细粒度的校验
const emit = defineEmits<{(e: 'changeMoney', money: number): void(e: 'changeCar', car: string): void
}>()

ref与Typescript

目标:掌握ref配合ts如何使用

  1. 通过泛型指定value的值类型,如果是简单值,该类型可以省略
const money = ref<number>(10)const money = ref(10)
  1. 如果是复杂类型,推荐指定泛型
type Todo = {id: numbername: stringdone: boolean
}
const list = ref<Todo[]>([])setTimeout(() => {list.value = [{ id: 1, name: '吃饭', done: false },{ id: 2, name: '睡觉', done: true }]
})

reactive与Typescript

目标:掌握reactive配合typescript如何使用

// reactive 适合于明确属性的对象场景
type User = {name: stringage: number
};
const obj: User = reactive({name: "zs",age: 18
});

computed与Typescript

目标:掌握computed配合typescript如何使用

  1. 通过泛型可以指定computed计算属性的类型,通常可以省略
const leftCount = computed<number>(() => {return list.value.filter((item) => item.done).length
})
console.log(leftCount.value)

事件处理与Typescript

目标:掌握事件处理函数配合typescript如何使用

const move = (e: MouseEvent) => {mouse.value.x = e.pageXmouse.value.y = e.pageY
}<h1 @mousemove="move($event)">根组件</h1>

Template Ref与Typescript

目标:掌握ref操作DOM时如何配合Typescript使用

const imgRef = ref<HTMLImageElement | null>(null)onMounted(() => {console.log(imgRef.value?.src)
})

如何查看一个DOM对象的类型:通过控制台进行查看

document.createElement('img').__proto__

可选链操作符

目标:掌握js中的提供的可选链操作符语法

内容

  • 可选链操作符( ?. )允许读取位于连接对象链深处的属性的值,而不必明确验证链中的每个引用是否有效。
  • 参考文档:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Optional_chaining
let nestedProp = obj.first?.second;
console.log(res.data?.data)
obj.fn?.()if (obj.fn) {obj.fn()
}
obj.fn && obj.fn()// 等价于
let temp = obj.first;
let nestedProp = ((temp === null || temp === undefined) ? undefined : temp.second);

非空断言

目标:掌握ts中的非空断言的使用语法

内容:

  • 如果我们明确的知道对象的属性一定不会为空,那么可以使用非空断言 !
// 告诉typescript, 明确的指定obj不可能为空
let nestedProp = obj!.second;
  • 注意:非空断言一定要确保有该属性才能使用,不然使用非空断言会导致bug

【TypeScript】TS与Vue相关推荐

  1. 学习TypeScript(TS),这一篇就足够了

    一.TypeScript 简介 1.什么是 TypeScript? 官方文档 TypeScript 本质上是向 JavaScript 语言添加了「可选的静态类型」和「基于类的面向对象」编程,它相当于是 ...

  2. ts watch路由 参数变化_TypeScript基础(六):TS 在 Vue 中的用法,data,生命周期,methods,computed,props,watch,$emit...

    其实 ts 在 vue 的环境下,我们经常用的一个东西就是上一篇博客讲的装饰器. 装饰器一般情况下有三种用途: 1,装饰整个类. 2,装饰某一个方法. 3,装饰某一个属性. 而这三种用途对 vue 来 ...

  3. TypeScript深度剖析:Vue项目中应用TypeScript?

    一.前言 与link类似 在VUE项目中应用typescript,我们需要引入一个库vue-property-decorator, 其是基于vue-class-component库而来,这个库vue官 ...

  4. TypeScript (TS

    1.Node卸载 1)控制面板卸载 2)安装位置删除文件夹 3)c盘用户 下去删除.npmrc文件 2.下载Nodejs 最新下载地址: 下载 | Node.js 中文网 安装: 双击打开,下一步,同 ...

  5. 使用 typescript ,提升 vue 项目的开发体验(1)

    此文已由作者张汉锐授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 前言:对于我们而言,typescript 更像一个工具 官方指南 从 vue2.5 之后,vue 对 ts ...

  6. TS在vue中的应用

    TIP typescript 配合 Vue3 composition-api 使用 TypeScript 与组合式 API | Vue.js script 加上 lang="ts" ...

  7. ts 在vue中的使用总结

    依旧是只有标题,好像只有这样才能慢慢补坑 / **   **************************  终于来补坑了  ***************************  ** / 变量 ...

  8. vue3 vite ts引入vue文件报错 ts(2307)

    vue3 vite ts 生成的项目模板,在ts文件中引入vue文件报错 ts(2307),只是ts报错,并不影响项目运行. 官方文档有说明:http://vue.dragonlm.com/guide ...

  9. typescript 判断异步执行已经结束_vue进阶系列——用typescript玩转vue和vuex

    用过vue的朋友大概对vuex也不陌生,vuex的官方解释是专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化. ...

最新文章

  1. 巧用iptables搞定SYN洪水攻击!
  2. 数字语音信号处理学习笔记——语音信号的数字模型(3)
  3. 启动HBase抛出org.apache.hadoop.hbase.ClockOutOfSyncException异常:hmaster正常,节点hregionserver启动失败
  4. Spring-级联赋值
  5. kafka技术内幕(二)
  6. LiveVideoStack线上分享第三季(十三):腾讯云LiteAVSDK演进之路
  7. gc.collect()==>python的强制垃圾收集机制(不建议使用强制回收,因为可能导致错误)
  8. WebDev.WebServer.exe遇到问题需要关闭
  9. 定位排除数据库故障_对数据库邮件故障进行故障排除
  10. (C语言)猴子选大王
  11. [转载] python numpy 总结
  12. 控制小灯闪烁次数_Luat系列官方教程2:控制LED小灯
  13. HDU 4731 Minimum palindrome 打表找规律
  14. 小程序毕设作品之微信小程序点餐系统毕业设计(5)任务书
  15. 罗技G304等鼠标GHUB驱动配置
  16. hexo yilia 文章浏览量统计
  17. win10系统进行电脑分盘
  18. 高冷一字id_lol高冷而有诗意的id
  19. JS获取手机型号和系统类型
  20. 海通股票交易接口查询当日成交c++源码分享

热门文章

  1. 7.camera驱动06-自己实现v4l2驱动-虚拟摄像头
  2. nlp自然语言处理中句子相似度计算
  3. 模块度(Modularity)与Fast Newman算法讲解与代码实现
  4. 敏捷物联——引领生产和服务创新
  5. oppo系统工程师暑期实习生面经(已OC)
  6. 路由器中宽带密码查看
  7. 基于ssm Vue+elementui农家乐管理系统java 项目源码介绍
  8. 计算机公务员写材料吗,公务员写材料到底从哪入手啊
  9. Android 9.0 蓝牙通讯录 BluetoothPbapClient
  10. 爬虫chromedriver被识别怎么办?