vue3组件TS类型声明实例代码

简介: vue3组件TS类型声明实例代码

为 props 标注类型

当使用


<script setup lang="ts">
const props = defineProps({
  foo: { type: String, required: true },
  bar: Number
})
props.foo // string
props.bar // number | undefined
</script>


这被称为 运行时声明 ,因为传递给 defineProps() 的参数会作为运行时的 props 选项使用。


第二种方式,通过泛型参数来定义 props 的类型,这种方式更加直接:

<script setup lang="ts">
const props = defineProps<{
  foo: string
  bar?: number
}>()
</script>

这被称为 基于类型的声明 ,编译器会尽可能地尝试根据类型参数推导出等价的运行时选项。


我们也可以将 props 的类型移入一个单独的接口中:

<script setup lang="ts">
interface Props {
  foo: string
  bar?: number
}
const props = defineProps<Props>()
</script>


基于类型的方式更加简洁,但失去了定义 props 默认值的能力。我们可以通过目前实验性的 响应性语法糖 来解决:

<script setup lang="ts">
interface Props {
  foo: string
  bar?: number
}
// 响应性语法糖 默认值会被编译为等价的运行时选项
const { foo, bar = 100 } = defineProps()


这个行为目前需要在配置中显式地选择开启:


// vite.config.js
export default {
  plugins: [
    vue({
      reactivityTransform: true
    })
  ]
}
// vue.config.js
module.exports = {
  chainWebpack: (config) => {
    config.module
      .rule('vue')
      .use('vue-loader')
      .tap((options) => {
        return {
          ...options,
          reactivityTransform: true
        }
      })
  }
}


如果没有使用

import { defineComponent } from 'vue'
export default defineComponent({
  props: {
    message: String
  },
 setup(props) {
    props.message // <-- 类型:string
  }
})


 

相关文章
|
10天前
vue3学习(3)
vue3学习(3)
|
10天前
|
资源调度 JavaScript API
vue3封装城市联动组件
vue3封装城市联动组件
|
6天前
|
JavaScript API
Vue3中的计算属性能否动态修改
【9月更文挑战第5天】Vue3中的计算属性能否动态修改
38 10
|
2天前
|
前端开发
vue3+ts项目中使用mockjs
vue3+ts项目中使用mockjs
187 57
|
10天前
|
JavaScript 前端开发
vue3学习(1)
vue3学习(1)
90 44
|
6天前
|
JavaScript API
如何使用Vue3的可计算属性
【9月更文挑战第5天】如何使用Vue3的可计算属性
40 13
|
6天前
|
资源调度 JavaScript API
vue3 组件通信方式
vue3 组件通信方式
36 11
|
6天前
|
缓存 JavaScript API
Vue3— computed的实现原理
【9月更文挑战第5天】Vue3— computed的实现原理
27 10
|
10天前
|
存储 JavaScript
vue组件的五种传值方法(父子\兄弟\跨组件)
vue组件的五种传值方法(父子\兄弟\跨组件)
|
9天前
|
存储 JavaScript 前端开发
Vue 3的响应式系统是如何工作的呢
【9月更文挑战第3天】Vue 3的响应式系统是如何工作的呢
20 4