Vue3:Typescript与组合式API、defineProps、defineEmits等使用

这篇具有很好参考价值的文章主要介绍了Vue3:Typescript与组合式API、defineProps、defineEmits等使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

标注类型:props

使用 defineProps()

使用 <script setup>

在使用 <script setup> 时,defineProps() 宏函数支持从它的参数中推导类型:

  • 运行时声明
<script setup lang="ts">
/**
 *  type:参数类型
 *  required:必须传参(默认:false)
 *  default:默认值
 * /
const props = defineProps({
  name: {
    type: String,
    required: true
  },
  title: {
    type: Number,
       required: false
  },
  status: Boolean
})
</script>
  • 基于类型的声明
<script setup lang="ts">
/**
 * 方式一:通过泛型参数
 */
const props = defineProps<{
  name?: string,
  title: number,
  status?: boolean
}>()

/**
 * 方式二:编写单独接口
 */
interface Props {
  name?: string,
  title: number,
  status?: boolean
}
const props = defineProps<Props>()

// ?代表可选参数 可以不用传
</script>

注意:接口或对象字面类型可以包含从其他文件导入的类型引用,但是,传递给 defineProps 的泛型参数本身不能是一个导入的类型, 这是因为Vue 组件是单独编译的,编译器目前不会抓取导入的文件以分析源类型(这里只是 Vue3.2 不支持,可能在之后的版本中会支持),即:

<script setup lang="ts">
// 支持
interface Props {
  /****/
}
defineProps<Props>()

// 不支持
import { Props } from './Props'
defineProps<Props>()
</script>
设置默认值

当使用基于类型的声明时,我们失去了为 props 声明默认值的能力。这可以通过 withDefaults 编译器宏解决:

<script setup lang="ts">
const props = withDefaults(defineProps<{
  name: string
  title?: string
  num: number[]
}>(), {
  title: '测试标题',
  num: () => [10, 20, 30, 40, 50]
})
</script>

标注类型:emits

使用 defineEmits()

<script setup lang="ts">
// 运行时
const emit = defineEmits(['change', 'update'])

// 基于类型
const emit = defineEmits<{
  (e: 'change', id: number): void
  (e: 'update', array: number[]): void
}>()

// 使用
emit('change', 10)
</script>

标注类型:ref()

  • 基本使用

ref 会根据初始化时的值推导其类型,也可指定具体类型:

<script setup lang="ts">
import {ref} from 'vue'
// 推导类型为 number
const count = ref(100)
// 指定具体类型
const val = ref<string>('你好世界')
</script>
  • 复杂类型使用

通过使用 Ref 这个类型来指定更为复杂的类型:

<script setup lang="ts">
import {ref} from 'vue'
import type {Ref} from 'vue'

// 标识既可以是数值类型 也可以是布尔类型
const count: Ref<number | boolean> = ref(100)
// 或者直接使用 ref() 传入一个泛型参数,来覆盖默认的推导行为
const value = ref<string | boolean>(true)
</script>

注意:如果你指定了一个泛型参数但没有给出初始值,那么最后得到的就将是一个包含 undefined 的联合类型,如:

<script setup lang="ts">
import {ref} from 'vue'

// 推导类型为Ref<number | boolean | undefined>
const count = ref<number | boolean>()
console.log(count.value)// 结果:undefined
</script>

标注类型:reactive()

reactive() 也会隐式地从它的参数中推导类型:

<script setup lang="ts">
import {reactive} from 'vue'

// 推导得到的类型:{ name: string }
const user = reactive({name: '张三'})

// 使用接口
interface User {
  name: string
  age: string | number
  gender?: string
}

const user: User = reactive({name: '张三', age: 23})
// 或者使用 reactive 泛型
const user = reactive<User>({name: '张三', age: 23, gender: '男'})
</script>
标注类型:computed()

computed() 会自动从其计算函数的返回值上推导出类型:文章来源地址https://www.toymoban.com/news/detail-419708.html

<script setup lang="ts">
import {ref, computed} from 'vue'

const age = ref(23)

// 推导类型:ComputedRef<number>
const userAge = computed(() => age.value++)

// 使用泛型
const userAge = computed<number>(() => {
  // 若返回值不是 number 类型则会报错
  return 23;
})

// 设置 getter setter
const userAge = computed({
  get: () => {
  },
  set: () => {
  }
})
</script>

到了这里,关于Vue3:Typescript与组合式API、defineProps、defineEmits等使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Vue3】如何创建Vue3项目及组合式API

    文章目录 前言 一、如何创建vue3项目? ①使用 vue-cli 创建  ②使用可视化ui创建  ③npm init vite-app   ④npm init vue@latest 二、 API 风格 2.1 选项式 API (Options API) 2.2 组合式 API (Composition API) 总结 例如:随着前端领域的不断发展,vue3学习这门技术也越来越重要,很多人都开启了学习

    2024年02月03日
    浏览(42)
  • vue3组合式api单文件组件写法

    一,模板部分  二,js逻辑部分 

    2024年02月13日
    浏览(36)
  • vue3 组合式 api 单文件组件写法

    Vue3 中的 Composition API 是一种新的编写组件逻辑的方式,它提供了更好的代码组织、类型推导、测试支持和复用性。相比于 Vue2 的 Options API,Composition API 更加灵活和可扩展。 在 Composition API 中,我们使用 setup 函数来定义组件的逻辑部分。setup 函数是一个特殊的函数,在创建组

    2024年02月12日
    浏览(26)
  • vue3:7、组合式API-watch

     

    2024年02月09日
    浏览(33)
  • 带你了解vue3组合式api基本写法

    本文的目的,是为了让已经有 Vue2 开发经验的 人 ,快速掌握 Vue3 的写法。 因此, 本篇假定你已经掌握 Vue 的核心内容 ,只为你介绍编写 Vue3 代码,需要了解的内容。 一、Vue3 里 script 的三种写法 首先,Vue3 新增了一个叫做组合式 api 的东西,英文名叫 Composition API。因此 Vu

    2024年02月01日
    浏览(71)
  • Vue3: 选项式API和组合式API的优缺点

    Vue框架提供了两种不同的API风格来编写组件,分别是 选项式API 和 组合式API 。 一.选项式API: 选项式API是vue2.x版本中默认使用的API风格,它是基 于对象的方式 来描述组件的行为和状态的。选项式API需要在Vue组件的选项对象中声明组件的属性和方法,如data、methods、computed、

    2024年02月09日
    浏览(34)
  • vue3 组合式api中 ref 和$parent 的使用

    ref 的使用 vue3中, 在 组件中添加一个 component ref=“xxx” ,就可以在父组件中得到 子组件的 dom 对象, 以及 虚拟的 dom 对象, 有了虚拟 dom, 我们就可以在父组件中控制子组件的显示了 ref 的使用方法 vue3中ref 的特点 以上如果在vue2中,就可以使用 子组件的对象来改变子组件的

    2024年02月10日
    浏览(34)
  • Vue3的组合式API中如何使用provide/inject?

    听说 Vue 3 加入了超多酷炫的新功能,比如组合式 API 等等。今天我们就来聊聊 Vue 3 中的组合式 API,并且如何使用 provide/inject 来搞定它! 首先,我们来了解一下组合式 API 是什么。其实,组合式 API 就是一个用来构建和组合函数的工具,它能让我们的代码更加简洁、可读性更

    2024年02月11日
    浏览(35)
  • 【vue3.0 组合式API与选项式API是什么,有什么区别】

    Vue3.0中引入了组合式API(Composition API),同时保留了选项式API(Options API)。两种 API 风格都能够覆盖大部分的应用场景。它们只是同一个底层系统所提供的两套不同的接口。实际上,选项式 API 是在组合式 API 的基础上实现的!关于 Vue 的基础概念和知识在它们之间都是通用的

    2024年02月10日
    浏览(30)
  • vue3:5、组合式API-reactive和ref函数

    目录 0、两者的异同  备注 :vscode通过volar插件自动添加.value 一、reactive() 二、ref()  三、toRefs和toRef    reactive不能处理简单类型的数据 reactive重新分配一个对象会失去响应式。可以使用Object.assign()代替          ref可以支持任何类型的值(基础类型以及对象),但是必须通过

    2024年02月09日
    浏览(23)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包