ts踩坑!在 Vue.js 中使用 Element Plus 组件库时,组件属性值所传类型需要与组件期望的类型一致。

6 篇文章 0 订阅

在 Vue.js 中使用 Element Plus 组件库时,用el-tag组件举例,
属性值所传类型需要与组件期望的类型一致。

//当我们简单定义 举例:
  let tagType:string = ' '
  或者: let tagType = ref<string>('')

然后给el-tag的type属性赋值时,会出现ts错误信息如下:
在这里插入图片描述
这个TypeScript错误表明你在为el-tag组件的type属性赋值时,类型不匹配。el-tag组件的type属性通常期望一个特定的枚举值集合(如"success", “warning”, “info”, “danger”),但你可能尝试将一个普通的字符串(string类型)赋给了它,而这个字符串并不是预期枚举值中的一个。

解决方案
1. 确保tagType是预期的类型:
确保tagType变量的类型与el-tag的type属性期望的类型相匹配。如果el-tag的type属性只接受特定的字符串值(如"success", “warning”, “info”, “danger”),那么你需要确保tagType也是这些值之一。

const tagType: 'success' | 'warning' | 'info' | 'danger' = 'success'; // 示例

或者,如果tagType是从某处动态获取的,你可能需要添加类型断言或条件检查来确保它是有效的:

const tagType = someFunctionThatReturnsString(); // 假设这个函数返回'success', 'warning', 'info', 或 'danger'之一
const safeTagType = tagType as 'success' | 'warning' | 'info' | 'danger'; // 类型断言

// 或者
const safeTagType = ['success', 'warning', 'info', 'danger'].includes(tagType) ? tagType : 'info'; // 条件检查

2.考虑使用枚举:
如果你经常需要处理这种类型的值,定义一个TypeScript枚举可能是一个好主意。这不仅可以提高代码的可读性,还可以帮助TypeScript更好地推断类型。

enum TagType {
  Success = 'success',
  Warning = 'warning',
  Info = 'info',
  Danger = 'danger'
}
const tagType: TagType = TagType.Success; //给个初始值
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,根据你的需求描述,我来为你提供一个 Vue3 + Element Plus + TypeScript 的数据字典下拉选择框组件的示例代码,希望能对你有所帮助。 ```vue <template> <el-select v-model="value" placeholder="请选择"> <el-option v-for="(item, index) in options" :key="index" :label="item.label" :value="item.value" /> </el-select> </template> <script lang="ts"> import { defineComponent } from 'vue' import { ElSelect, ElOption } from 'element-plus' import { getDictOptions, DictOption } from '@/api/dict' export default defineComponent({ name: 'DictSelect', components: { ElSelect, ElOption }, props: { dicCode: { type: String, required: true }, value: { type: String, default: '' } }, data() { return { options: [] as DictOption[] } }, watch: { dicCode: { immediate: true, handler(val: string) { this.loadOptions(val) } } }, methods: { async loadOptions(dicCode: string): Promise<void> { const result = await getDictOptions(dicCode) this.options = result.data } } }) </script> <style scoped> </style> ``` 在这个示例代码,我们定义了一个名为 `DictSelect` 的组件,其包含了一个 el-select 和若干个 el-option 组件,用于展示数据字典的选项。组件,我们使用Element Plus 提供的 el-select 和 el-option 组件,以及 Vue3 的 `defineComponent` 函数来定义组件。 在组件的 props ,我们定义了一个必选的 `dicCode` 属性,用于指定数据字典的编码;以及一个可选的 `value` 属性,用于指定选的值。在组件的 data ,我们定义了一个 `options` 数组,用于存储数据字典的选项。 组件的 `loadOptions` 方法用于加载数据字典的选项,它接受一个 `dicCode` 参数,用于指定数据字典的编码。在这个方法,我们调用了一个名为 `getDictOptions` 的 API 接口,该接口用于获取指定数据字典的选项。在接口返回结果后,我们将选项数组保存到组件的 data 。 最后,在组件,我们使用了一个 watch 来监听 `dicCode` 属性的变化,当 `dicCode` 的值发生变化时,我们自动调用 `loadOptions` 方法来加载数据字典的选项。在 el-select ,我们使用了 `v-model` 来绑定选的值。当用户选择了一个选项后,组件会自动将选的值存储到组件的 data ,并触发一个 `input` 事件来通知父组件更新绑定的值。 使用这个组件时,你可以在父组件引入它,并传入一个 `dicCode` 值来展示对应的数据字典,例如: ```vue <template> <DictSelect v-model="selectedValue" dicCode="gender" /> </template> <script lang="ts"> import { defineComponent, ref } from 'vue' import DictSelect from '@/components/DictSelect.vue' export default defineComponent({ name: 'Example', components: { DictSelect }, setup() { const selectedValue = ref('') // 选的值 return { selectedValue } } }) </script> <style scoped> </style> ``` 在这个示例代码,我们在父组件引入了 `DictSelect` 组件,并传入了一个 `dicCode` 值为 `gender`。我们还使用了 `v-model` 来双向绑定选的值,并将其保存在 `selectedValue` 变量。当用户选择了一个选项后,`selectedValue` 的值会自动更新,当再次打开页面时,`selectedValue` 的值会自动回显。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值