TypeScript,枚举类型和字面量类型的区别

枚举类型和字面量类型都是用于表示一组有限的常量值,但它们有一些区别:

1. 枚举类型:

成员编号: 枚举类型的成员具有从 0 开始的默认编号,也可以手动指定编号。

enum Direction {
    Up,    // 0
    Down,  // 1
    Left,  // 2
    Right  // 3
}

反向映射: 枚举类型提供了从值到成员名称的反向映射。

let directionName: string = Direction[2]; // "Left"

运行时存在: 枚举在运行时会被转换为真正的 JavaScript 对象。

2. 字面量类型:

直接值约束: 字面量类型直接约束变量、参数或属性的值必须是特定的字面量值。

let status: "success" | "error";

没有默认编号: 字面量类型没有默认的编号,它直接使用字面量值本身。

let color: "red" | "green" | "blue";

不生成 JavaScript 对象: 字面量类型在编译后不会生成真正的 JavaScript 对象,它们只是在类型检查阶段用于约束值的类型。

const enum Colors {
    Red,
    Green,
    Blue
}

let color: Colors = Colors.Green;

3. 常量枚举:

枚举的一种特殊形式: 常量枚举是枚举的一种特殊形式,通过添加 const 关键字创建。

const enum Colors {
    Red,
    Green,
    Blue
}

在编译时被删除: 常量枚举在编译时会被删除,只保留成员的实际值,以提高性能。

let color: Colors = Colors.Green; // 编译后直接变成 let color = 1;

总的来说,枚举类型适用于需要一组有序编号的常量值,而字面量类型适用于直接约束变量为特定的字面量值。常量枚举是一种特殊的枚举形式,用于提高性能。选择使用枚举类型还是字面量类型取决于你的需求和代码设计。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值