枚举类型和联合类型的主要区别
- 定义方式:
- 枚举类型:使用
enum
关键字定义,用于定义一组命名的常量。例如:
enum Color {
Red = 1,
Green = 2,
Blue = 3
}
- **联合类型**:使用竖线`|`分隔不同类型来定义,表示一个值可以是多种类型中的一种。例如:
let value: string | number;
value = 'hello';
value = 42;
- 本质:
- 枚举类型:本质上是数值(默认从0开始自增,也可自定义值)或字符串的集合,主要用于定义一组相关的常量。
- 联合类型:是不同类型的组合,强调值可以具有多种类型。
- 类型检查:
- 枚举类型:值必须是枚举中定义的成员。
- 联合类型:只要值的类型符合联合类型中的某一种即可。
前端表单验证模块中选择建议
- 选择枚举类型的场景:
- 当表单字段类型是固定且明确的有限集合,并且这些类型有明确的命名含义,且可能需要在不同地方使用这些常量时,选择枚举类型。例如,表单可能有几种固定的输入类型,如文本、数字、日期,且在代码中有多处根据不同类型进行不同处理逻辑,使用枚举类型可使代码更易读和维护。
enum FormFieldType {
Text = 'text',
Number = 'number',
Date = 'date'
}
function validateFormField(fieldType: FormFieldType, value: string) {
switch (fieldType) {
case FormFieldType.Text:
// 文本验证逻辑
break;
case FormFieldType.Number:
// 数字验证逻辑
break;
case FormFieldType.Date:
// 日期验证逻辑
break;
}
}
- 选择联合类型的场景:
- 如果表单字段类型除了常见的几种,还可能接受其他类型(如自定义类型),或者在某些情况下类型比较灵活,不局限于固定集合时,选择联合类型。例如,在一些高级表单中,某个字段可能既可以是常规的文本,也可以是富文本(假设富文本用一个特定的对象表示)。
type RichText = { content: string; format: string };
type FormFieldTypeUnion = 'text' | 'number' | 'date' | RichText;
function validateFormFieldUnion(fieldType: FormFieldTypeUnion, value: string) {
if (typeof fieldType ==='string') {
// 常规类型验证逻辑
} else {
// 富文本验证逻辑
}
}