最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue3?中?PropType?的使用指南(示例詳解)

 更新時(shí)間:2026年01月14日 10:34:12   作者:前端開(kāi)發(fā)_穆金秋  
Vue3中PropType是TypeScript類(lèi)型工具,用于定義組件props的類(lèi)型,基本用法包括簡(jiǎn)單類(lèi)型、對(duì)象、數(shù)組和函數(shù)定義,高級(jí)用法涉及聯(lián)合類(lèi)型、嵌套對(duì)象和函數(shù)類(lèi)型,本文介紹Vue3中PropType的使用指南,感興趣的朋友跟隨小編一起看看吧

Vue3中的PropType是TypeScript類(lèi)型工具,用于精確定義組件props的類(lèi)型,特別適用于復(fù)雜類(lèi)型。

文章介紹了基本用法(簡(jiǎn)單類(lèi)型、對(duì)象、數(shù)組、函數(shù)定義)、高級(jí)用法(聯(lián)合類(lèi)型、嵌套對(duì)象、函數(shù)類(lèi)型)以及最佳實(shí)踐(分離類(lèi)型定義、泛型組件、組合式API配合)。

重點(diǎn)注意事項(xiàng)包括:PropType僅提供TS類(lèi)型檢查、默認(rèn)值需用工廠(chǎng)函數(shù)、required屬性的類(lèi)型匹配以及自定義驗(yàn)證器的使用。

通過(guò)PropType可顯著提升Vue3組件的類(lèi)型安全性,是TS項(xiàng)目的必備工具。

在 Vue 3 中,PropType是一個(gè) TypeScript 類(lèi)型工具,用于為組件的 props 提供更精確的類(lèi)型定義。

它特別適用于定義復(fù)雜類(lèi)型(如對(duì)象、數(shù)組、函數(shù)等)的 props。

基本用法

1. 簡(jiǎn)單類(lèi)型定義

import { defineComponent, PropType } from 'vue'
export default defineComponent({
  props: {
    // 基本類(lèi)型
    title: String,
    count: Number,
    isActive: Boolean,
    // 使用 PropType 定義復(fù)雜類(lèi)型
    user: Object as PropType<{ name: string; age: number }>,
    // 數(shù)組類(lèi)型
    tags: Array as PropType<string[]>,
    // 函數(shù)類(lèi)型
    onSubmit: Function as PropType<(data: any) => void>,
  }
})

2. 接口/類(lèi)型別名使用

import { defineComponent, PropType } from 'vue'
// 定義接口
interface User {
  id: number
  name: string
  email: string
}
// 定義類(lèi)型
type Status = 'active' | 'inactive' | 'pending'
export default defineComponent({
  props: {
    // 使用接口
    user: {
      type: Object as PropType<User>,
      required: true
    },
    // 使用類(lèi)型別名
    status: {
      type: String as PropType<Status>,
      default: 'pending'
    },
    // 嵌套對(duì)象
    config: {
      type: Object as PropType<{
        color: string
        size: 'sm' | 'md' | 'lg'
        enabled: boolean
      }>,
      default: () => ({})
    }
  }
})

高級(jí)用法

1. 聯(lián)合類(lèi)型

props: {
  value: {
    type: [String, Number, Boolean] as PropType<string | number | boolean>,
    required: true
  }
}

2. 數(shù)組和對(duì)象組合

interface Product {
  id: number
  name: string
  price: number
}
props: {
  // 對(duì)象數(shù)組
  products: {
    type: Array as PropType<Product[]>,
    default: () => []
  },
  // 復(fù)雜嵌套對(duì)象
  metadata: {
    type: Object as PropType<{
      pagination: {
        page: number
        limit: number
        total: number
      }
      filters: Record<string, any>
    }>,
    default: () => ({})
  }
}

3. 函數(shù)類(lèi)型

props: {
  // 函數(shù)返回值
  getData: {
    type: Function as PropType<() => Promise<any[]>>,
    required: true
  },
  // 帶參數(shù)的函數(shù)
  onSuccess: {
    type: Function as PropType<(result: any) => void>,
    default: () => {}
  },
  // 事件處理器
  onChange: {
    type: Function as PropType<(event: Event) => void>
  }
}

使用 withDefaults

Vue 3 提供了 withDefaults 來(lái)處理帶默認(rèn)值的 props 類(lèi)型:

import { defineComponent, PropType, withDefaults } from 'vue'
interface Props {
  message?: string
  count?: number
  items?: string[]
}
export default defineComponent({
  props: withDefaults(defineProps<Props>(), {
    message: 'Hello',
    count: 0,
    items: () => []
  })
})

最佳實(shí)踐

1. 分離類(lèi)型定義

// types/user.ts
export interface User {
  id: number
  name: string
  role: 'admin' | 'user'
}
// UserProfile.vue
import { User } from '@/types/user'
props: {
  user: {
    type: Object as PropType<User>,
    required: true
  }
}

2. 使用泛型組件

import { defineComponent, PropType } from 'vue'
export default defineComponent({
  props: {
    items: {
      type: Array as PropType<any[]>,
      default: () => []
    },
    itemKey: {
      type: String,
      default: 'id'
    }
  },
  setup(props) {
    // props.items 的類(lèi)型是 any[]
  }
})

3. 配合組合式 API

import { defineComponent, PropType, computed } from 'vue'
interface User {
  id: number
  name: string
}
export default defineComponent({
  props: {
    users: {
      type: Array as PropType<User[]>,
      default: () => []
    }
  },
  setup(props) {
    // TypeScript 能正確推斷 props.users 的類(lèi)型
    const userNames = computed(() => 
      props.users.map(user => user.name)
    )
    return { userNames }
  }
})

注意事項(xiàng)

運(yùn)行時(shí)類(lèi)型檢查PropType 只提供 TypeScript 類(lèi)型檢查,運(yùn)行時(shí) Vue 仍會(huì)使用基本的構(gòu)造函數(shù)(如 ObjectArray)進(jìn)行驗(yàn)證。

默認(rèn)值函數(shù):對(duì)象和數(shù)組的默認(rèn)值應(yīng)使用工廠(chǎng)函數(shù):

default: () => []  // ? 正確
default: []        // ? 錯(cuò)誤(會(huì)共享引用)

required 屬性:使用 required: true 時(shí),確保 TypeScript 類(lèi)型也標(biāo)記為非可選:

props: {
  user: {
    type: Object as PropType<User>,  // User 應(yīng)該沒(méi)有 ? 可選標(biāo)記
    required: true
  }
}

自定義驗(yàn)證器

props: {
  score: {
    type: Number as PropType<number>,
    validator: (value: number) => {
      return value >= 0 && value <= 100
    }
  }
}

使用 PropType 可以大大提高 Vue 3 組件的類(lèi)型安全性,特別是在使用 TypeScript 的項(xiàng)目中。

到此這篇關(guān)于Vue3 中 PropType 的使用指南的文章就介紹到這了,更多相關(guān)vue proptype使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue中關(guān)于$emit和$on的使用及說(shuō)明

    vue中關(guān)于$emit和$on的使用及說(shuō)明

    這篇文章主要介紹了vue中關(guān)于$emit和$on的使用及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • 詳解如何使用Vuex實(shí)現(xiàn)Vue后臺(tái)管理中的角色鑒權(quán)

    詳解如何使用Vuex實(shí)現(xiàn)Vue后臺(tái)管理中的角色鑒權(quán)

    最近參與了公司一個(gè)新的B端項(xiàng)目的研發(fā),從無(wú)到有搭建項(xiàng)目的過(guò)程中,遇到了關(guān)于項(xiàng)目鑒權(quán)的問(wèn)題,這篇文章主要給大家介紹了關(guān)于如何使用Vuex實(shí)現(xiàn)Vue后臺(tái)管理中的角色鑒權(quán)的相關(guān)資料,需要的朋友可以參考下
    2022-05-05
  • vue3中v-model的用法詳解

    vue3中v-model的用法詳解

    vue 提供了很多自定義指令,大大方便了我們的開(kāi)發(fā),其中最常用的也就是 v-model,他可以在組件上使用以實(shí)現(xiàn)雙向綁定。它可以綁定多種數(shù)據(jù)結(jié)構(gòu), 今天總結(jié)一下用法
    2023-04-04
  • vue實(shí)現(xiàn)數(shù)字+英文字母組合鍵盤(pán)功能

    vue實(shí)現(xiàn)數(shù)字+英文字母組合鍵盤(pán)功能

    這篇文章主要介紹了vue實(shí)現(xiàn)數(shù)字+英文字母組合鍵盤(pán)功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-12-12
  • vscode中Vue別名路徑提示的實(shí)現(xiàn)

    vscode中Vue別名路徑提示的實(shí)現(xiàn)

    這篇文章主要介紹了vscode中Vue別名路徑提示的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Vue打包工具(構(gòu)建工具)和腳手架過(guò)程

    Vue打包工具(構(gòu)建工具)和腳手架過(guò)程

    文章介紹了Vue項(xiàng)目中Webpack和Vite的使用區(qū)別,Webpack需vue-cli全局安裝,適合復(fù)雜場(chǎng)景;Vite更輕量快速,適合Vue3項(xiàng)目,并提到尤雨溪團(tuán)隊(duì)新推出的VoidZero技術(shù)布局
    2025-08-08
  • vue2 中如何實(shí)現(xiàn)動(dòng)態(tài)表單增刪改查實(shí)例

    vue2 中如何實(shí)現(xiàn)動(dòng)態(tài)表單增刪改查實(shí)例

    本篇文章主要介紹了vue2 中如何實(shí)現(xiàn)動(dòng)態(tài)表單增刪改查實(shí)例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06
  • Vue中的scoped實(shí)現(xiàn)原理及穿透方法

    Vue中的scoped實(shí)現(xiàn)原理及穿透方法

    這篇文章主要介紹了Vue中的scoped實(shí)現(xiàn)原理及穿透方法,本文通過(guò)實(shí)例文字相結(jié)合的形式給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2018-05-05
  • vue如何從后臺(tái)獲取數(shù)據(jù)生成動(dòng)態(tài)菜單列表

    vue如何從后臺(tái)獲取數(shù)據(jù)生成動(dòng)態(tài)菜單列表

    這篇文章主要介紹了vue如何從后臺(tái)獲取數(shù)據(jù)生成動(dòng)態(tài)菜單列表,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • Vue3+TypeScript實(shí)現(xiàn)遞歸菜單組件的完整實(shí)例

    Vue3+TypeScript實(shí)現(xiàn)遞歸菜單組件的完整實(shí)例

    Vue.js中的遞歸組件是一個(gè)可以調(diào)用自己的組件,遞歸組件一般用于博客上顯示評(píng)論,形菜單或者嵌套菜單,文章主要給大家介紹了關(guān)于Vue3+TypeScript實(shí)現(xiàn)遞歸菜單組件的相關(guān)資料,需要的朋友可以參考下
    2021-08-08

最新評(píng)論

泰兴市| 宁乡县| 黄龙县| 巫山县| 桃园县| 襄垣县| 林西县| 巴里| 偏关县| 广宗县| 基隆市| 贵阳市| 镇平县| 博白县| 修武县| 洪雅县| 资溪县| 清丰县| 交城县| 绥阳县| 井冈山市| 信丰县| 兴安盟| 工布江达县| 十堰市| 运城市| 万山特区| 建宁县| 太白县| 林口县| 渝中区| 多伦县| 凤阳县| 宣汉县| 新和县| 镇江市| 华容县| 萨嘎县| 铜鼓县| 海原县| 南漳县|