小元
博客
详情文字在这里缓缓展开
静候你翻开这一页

Vite props的几种写法

Vite 组件接受参数的几种写法和区别。

   两种方式:

       1)运行时声明                                             2)声明类型

           - 可以设置默认值                                              - 强大的类型推断

           - 运行时类型校验                                             - 编译时类型检查

           - ts类型推断较弱                                               - 不能直接设置默认值


   运行时声明:

       使用对象语法,用对象定义每个prop的类型、必传、默认值,这里额外提一点对于类型为“对象” 或 “数组” 的默认值需要用函数返回,为什么要用函数返回,是因为如果不适用函数直接设置一个对象会导致所有的实例都会共享同一个对象,当一个实例对象被修改其余实例也会同步修改。

       它的特点是运行时校验,在使用组件时如果传错了类型将会在运行时将错误通过throw error出来。

<script setup lang="ts">
const props = defineProps({
  age: {
    type: Number,
    required: true,
    default: 1,
  },
  sex: {
    type: Number,
    default: 1,
  },
  name: {
    type: String,
    default: '',
  },
  other: {
    type: Object,
    default: () => ({ time: new Date().getTime() }),
  }
})
</script>


   类型声明:

       通常使用泛型方式定义传入,特点是不能直接设置默认值,但Ts类型校验强,在编写时就能提前发现问题,如果需要设置默认值需要借助函数withDefaults。

// 不设置默认值
interface IProps {
  age: number;
  sex?: number;
  name?: string;
  other?: {
    time: number;
    [propsName: string]: unknown;
  }
}

const props = defineProps<IProps>();

// 设置默认值
const props = withDefaults(defineProps<IProps>(), {
  sex: 1,
  name: '',
  other: () => ({
    time: 0,
  })
})


渝ICP备2024031078号-1
本网站一切内容不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
如无意中侵犯了企业或个人的知识产权等,请及时通过电子邮件(1102905617@qq.com)告知我,本网站将会给予删除。
最新公告
😊访客你好,很高兴你的到来,本博客仍在建设中,还有些许功能尚在开发中,最后祝你在此能有所收获。
💥小元博客第三代自2025年9月上线以来,2026/08/09日迎来了它的第三次更新本次更新内容如下:
1. 文章详情页样式变更,由原来的弹窗改为单独的页面。
2. 使用Nuxt对项目进行了SEO优化,优化了搜索引擎的抓取和索引。
3. 对验签进行了优化,降低了请求被误触发拦截的概率。
4. 移动端也正在稳步推进中,在不久的将来会与大家见面。
5. 修复了首页黄历节日不显示的问题,以及其它bug的修复。