# Vant 4 组件类型使用指南
本文档记录 Vant 4 组件的常见类型问题和正确用法,避免在开发中出现类型错误。
## 1. van-tag 组件
### size 属性
❌ **错误用法**:
```vue
标签
```
✅ **正确用法**:
```vue
标签
标签
标签
```
**类型定义**:`'large' | 'medium' | 'small'`
### type 属性
✅ **可用值**:
```vue
默认
主要
成功
警告
危险
```
## 2. van-button 组件
### size 属性
✅ **可用值**:
```vue
大按钮
普通按钮
小按钮
迷你按钮
```
**类型定义**:`'large' | 'normal' | 'small' | 'mini'`
### type 属性
✅ **可用值**:
```vue
默认按钮
主要按钮
成功按钮
警告按钮
危险按钮
```
## 3. van-icon 组件
### size 属性
✅ **可接受类型**:`string | number`
```vue
```
## 4. van-field 组件
### type 属性
✅ **常用值**:
```vue
```
## 5. van-picker 组件
### columns 属性
✅ **正确类型**:
```typescript
// 简单数组
const columns = ['选项1', '选项2', '选项3']
// 对象数组
const columns = [
{ text: '选项1', value: '1' },
{ text: '选项2', value: '2' }
]
// 多列
const columns = [
[{ text: '选项1', value: '1' }],
[{ text: '选项A', value: 'a' }]
]
```
## 6. van-stepper 组件
### 数值属性
✅ **正确用法**:
```vue
```
⚠️ **注意**:min、max、step 都应该是 number 类型,不要使用字符串。
## 7. 事件处理器
### 标准事件
✅ **正确写法**:
```vue
handleClick(item)">点击
点击
handleUpdate(val)" />
```
## 8. 常见类型错误及解决方案
### 错误 1: Type '"mini"' is not assignable to type 'TagSize'
**原因**:van-tag 不支持 `size="mini"`
**解决**:改用 `size="small"`
### 错误 2: Type 'string' is not assignable to type 'number'
**原因**:某些属性需要 number 类型
**解决**:使用 `:prop="value"` 而不是 `prop="value"`
### 错误 3: Property does not exist on type
**原因**:TypeScript 无法推断类型
**解决**:添加类型注解或使用 `as` 断言
## 9. 最佳实践
1. **使用 TypeScript 的类型检查**
```bash
npx tsc --noEmit
```
2. **参考官方文档**
访问 [Vant 4 官方文档](https://vant-ui.github.io/vant/#/zh-CN) 查看最新的 API 定义。
3. **使用 IDE 的类型提示**
在 VSCode 中,将鼠标悬停在组件上可以看到完整的类型定义。
4. **避免使用魔法字符串**
对于有固定选项的属性,优先使用常量或枚举:
```typescript
const TAG_SIZES = {
SMALL: 'small',
MEDIUM: 'medium',
LARGE: 'large'
} as const
```
## 10. 已修复的问题
### 2026-01-12
- ✅ 修复了 `src/views/buffet/menu.vue` 中 van-tag 的 `size="mini"` 错误
- ✅ 修复了 `src/views/buffet/select.vue` 中 van-tag 的 `size="mini"` 错误
- ✅ 修复了 `src/views/mine/mine.vue` 中 van-tag 的 `size="mini"` 错误
- ✅ 修复了 `src/components/TableHeader.vue` 中 van-tag 的 `size="small"` 错误
---
**更新时间**:2026-01-12
**维护者**:开发团队