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

  }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值