🎉一个demo体验Vue3.3+TypeScript所有新功能🎉

简介: 🎉一个demo体验Vue3.3+TypeScript所有新功能🎉

Vue3.3已经发布一个月了,今天我和大家体验下最新功能

💎 准备工作

🚗 创建项目并运行

创建完项目后记得下载最新的包

// 创建
npm create vite vue-demo --template vue-ts
// 下载依赖
cd vue-demo
npm i
// 更新到最新版本
npm i vue@3.3
// 运行
npm run dev

🚗 开启新功能

由于最新的功能defineModel是实验特性,需要在vite.config.js里开启,另外需要开启解构props响应式功能

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
// https://vitejs.dev/config/
export default defineConfig({
  plugins: [vue({  script: {
    defineModel: true, // 开启defineModel功能
    propsDestructure: true, // 开启props结构响应式
  } })],
})

🚗 下载最新的Vue Language Features (Volar)

如果你工作中还是写Vue2,那么建议你不要下载,因为和Vetur是冲突的

🚀 体验

🚗 defineProps使用引入外部定义的接口

// App.vue
<script setup lang='ts'>
// 定义接口并暴露出去
export interface Command {
  msg: string
}
const count = ref(0)
</script>
<template>
  <button @click="count ++">change count</button>
  <Child :msg="'hello vue3.3'" :count="count" />
</template>
// Child.vue
<script setup lang='ts'>
import { Command } from '../App.vue';
defineProps<Command & { count: number}>()
</script>
<template>
  <h1>{{ msg }}</h1>
  <div>{{ count }}</div>
</template>

效果如下:

🚗 props结构响应式

我们从defineProps中解构出count,然后使用watchEffect打印。

// Child.vue
<script setup lang='ts'>
const { count } = defineProps<Command & { count: number}>()
watchEffect(() => {
  console.log(count, 'count')
})
</script>

效果如下:

🚗 defineEmits

接下来使用defineEmits定义监听事件,当count发生变化时使用触发该事件。

// Child.vue
<script setup lang="ts">
const emits = defineEmits<{
  'count-change': [modelValue: number | undefined]
}>()
watchEffect(() => {
  console.log(count, 'count')
  emits('count-change', count)
})
</script>

在父组件中监听最新的变化值

// App.vue
<script setup lang="ts">
const countChange = (value: any[]) => {
  console.log(value, 'countChange')
}
</script>
<template>
  <Child @count-change="countChange" />
</template>

效果如下:

🚗 defineModel

接下来我们使用defineModel定义一个model,绑定在input标签上,同时使用watch监听变化。

// Child.vue
<template>
  <input v-model="modelValue" />
</template>
<script setup lang='ts'>
const modelValue = defineModel<string>()
watch(() => modelValue.value, (val) => console.log(val))
</script>

需要在父组件设置model初始值

// App.vue
<script setup lang="ts">
const modal = ref('hello world')
</script>
<template>
  <Child v-model="modal" />
</template>

此时效果如下:

🚗 一些类型检查增强的功能

泛型组件

script标签上用generic属性定义泛型,当然也可以使用extends关键字继承其他属性。

<script setup lang="ts" generic="T extends string | number, U extends Item">
import type { Item } from './types'
defineProps<{
  id: T
  list: U[]
}>()
</script>

defineSlots新增类型检查

defineSlots<{
  default?: (props: { msg: string }) => any
  item?: (props: { id: number }) => any
}>()

此时如果在具名插件上不写id属性或者属性不是指定类型都会报错。

🎉 总结

新功能确实越来越简洁了,加上TypeScript的加持,相信Vue3将会带来更好的便捷功能。

相关文章
|
4月前
|
JavaScript 前端开发 安全
【技术革新】Vue.js + TypeScript:如何让前端开发既高效又安心?
【8月更文挑战第30天】在使用Vue.js构建前端应用时,结合TypeScript能显著提升代码质量和开发效率。TypeScript作为JavaScript的超集,通过添加静态类型检查帮助早期发现错误,减少运行时问题。本文通过具体案例展示如何在Vue.js项目中集成TypeScript,并利用其类型系统提升代码质量。首先,使用Vue CLI创建支持TypeScript的新项目,然后构建一个简单的待办事项应用,通过定义接口描述数据结构并在组件中使用类型注解,确保代码符合预期并提供更好的编辑器支持。
91 0
|
4月前
|
JavaScript 前端开发 安全
立等可取的 Vue + Typescript 函数式组件实战
立等可取的 Vue + Typescript 函数式组件实战
|
5月前
|
JavaScript 前端开发
【Vue3+TypeScript】CRM系统项目搭建之 — 关于如何设计出优质的 Vue 业务组件
【Vue3+TypeScript】CRM系统项目搭建之 — 关于如何设计出优质的 Vue 业务组件
53 0
【Vue3+TypeScript】CRM系统项目搭建之 — 关于如何设计出优质的 Vue 业务组件
|
6月前
|
JavaScript 安全 前端开发
Vue 3 中的 TypeScript
【6月更文挑战第15天】
92 6
|
7月前
|
JavaScript
【第12期】Vue3+TypeScript+Vite中动态引入图片等静态资源
【第12期】Vue3+TypeScript+Vite中动态引入图片等静态资源 c
1310 0
|
7月前
|
JavaScript 前端开发 开发者
类型检查:结合TypeScript和Vue进行开发
【4月更文挑战第24天】TypeScript是JavaScript超集,提供类型注解等特性,提升代码质量和可维护性。Vue.js是一款高效前端框架,两者结合优化开发体验。本文指导如何配置和使用TypeScript与Vue:安装TypeScript和Vue CLI,创建Vue项目时选择TypeScript支持,配置`tsconfig.json`,编写`.tsx`组件,最后运行和构建项目。这种结合有助于错误检查和提升开发效率。
61 2
|
7月前
|
JavaScript 前端开发 开发者
Vue工具和生态系统: Vue.js和TypeScript可以一起使用吗?
【4月更文挑战第18天】Vue.js与TypeScript兼容,官方文档支持在Vue项目中集成TypeScript。TypeScript作为JavaScript超集,提供静态类型检查和面向对象编程,增强代码准确性和健壮性。使用TypeScript能提前发现潜在错误,提升代码可读性,支持接口和泛型,使数据结构和函数更灵活。然而,不是所有Vue插件都兼容TypeScript,可能需额外配置。推荐尝试在Vue项目中使用TypeScript以提升项目质量。
121 0
|
7月前
|
JavaScript 前端开发
在Vue中使用TypeScript的常见问题有哪些?
在Vue中使用TypeScript的常见问题有哪些?
110 2
|
7月前
|
JavaScript 前端开发
在Vue中使用TypeScript的优缺点是什么?
在Vue中使用TypeScript的优缺点是什么?
130 0
|
7月前
|
JavaScript
在 Vue 中如何使用 TypeScript?
在 Vue 中如何使用 TypeScript?
46 0