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
 
  }


相关文章
|
1天前
|
开发工具 git
vite+vue3+ts从0到1搭建企业级项目(4)
vite+vue3+ts从0到1搭建企业级项目
13 0
|
1天前
|
存储 JavaScript API
vite+vue3+ts从0到1搭建企业级项目(3)
vite+vue3+ts从0到1搭建企业级项目
13 0
|
1天前
|
资源调度 JavaScript 前端开发
vite+vue3+ts从0到1搭建企业级项目(2)
vite+vue3+ts从0到1搭建企业级项目
10 1
|
1天前
|
存储 JavaScript API
Vue状态管理深度剖析:Vuex vs Pinia —— 从原理到实践的全面对比
Vue状态管理深度剖析:Vuex vs Pinia —— 从原理到实践的全面对比
6 2
|
1天前
|
JavaScript
vue知识点
vue知识点
8 3
|
3天前
|
JavaScript 前端开发 测试技术
使用 Vue CLI 脚手架生成 Vue 项目
通过 Vue CLI 创建 Vue 项目可以极大地提高开发效率。它不仅提供了一整套标准化的项目结构,还集成了常用的开发工具和配置,使得开发者可以专注于业务逻辑的实现,而不需要花费大量时间在项目配置上。
59 7
使用 Vue CLI 脚手架生成 Vue 项目
|
4天前
|
JavaScript 算法
“Error: error:0308010C:digital envelope routines::unsupported”启动vue项目遇到一个错误【已解决
“Error: error:0308010C:digital envelope routines::unsupported”启动vue项目遇到一个错误【已解决
8 1
|
4天前
|
JavaScript
error Component name “Login“ should always be multi-word vue/multi-word-component-names【已解决】
error Component name “Login“ should always be multi-word vue/multi-word-component-names【已解决】
9 1
|
6天前
|
JavaScript 前端开发 Java
【vue实战项目】通用管理系统:作业列表
【vue实战项目】通用管理系统:作业列表
19 0
|
6天前
|
JavaScript API
【vue实战项目】通用管理系统:信息列表,信息的编辑和删除
【vue实战项目】通用管理系统:信息列表,信息的编辑和删除
22 2