当前位置: 首页 > news >正文

TS中的enum变量和普通object区别

文章目录

    • 一、定义
    • 二、编译后的输出
    • 三、类型安全
    • 四、使用场景

这两种数据经常混用,但是也有一定区别

一、定义

  • enum变量通常用使用常量
  • object则没有限制值的类型
// 案例
enum Direction {Up,Down,Left,Right
}
const direction = {Up: 'UP',Down: 'DOWN',Left: {},Right: []
};

二、编译后的输出

  • enum变量编译后时向映射,会默认添加数字索引,其次是自定义枚举的索引
  • enum变量读取属性的时候,可以使用两种索引
  • 普通object,不变;典型key:value结构
var Direction;
(function (Direction) {Direction[Direction["Up"] = 0] = "Up";Direction[Direction["Down"] = 1] = "Down";Direction[Direction["Left"] = 2] = "Left";Direction[Direction["Right"] = 3] = "Right";
})(Direction || (Direction = {}));
// 等同于
{"0": "Up","1": "Down","2": "Left","3": "Right","Up": 0,"Down": 1,"Left": 2,"Right": 3
}
console.log(Direction[0]); // "Up"
console.log(Direction.Up); // 0
// 普通object,不变
const direction = {Up: 'UP',Down: 'DOWN',Left: {},Right: []
};

三、类型安全

  • enum变量定义的变量,值会被检测,超出enum所有枚举值以外的赋值会报错
  • 普通object,没有检验,赋值、读取、删除都不受限制(一般如此,可以通过Object.definePropertype配置,或使用Proxy 对象增加限制)
let dir: Direction = Direction.Up; // 正确
dir = 5; // 错误:不能将类型 '5' 分配给类型 'Direction'

四、使用场景

  • enum变量常使用于固定场合,其中的枚举值不会动态改变(可以理解为前端可以写死的数据)
  • 普通object可以更加方便的扩展和存储数据

http://www.mrgr.cn/news/82392.html

相关文章:

  • 《Rust权威指南》学习笔记(二)
  • 单片机--51- RAM
  • python +tkinter绘制彩虹和云朵
  • Navicat 17 for Mac 数据库管理软件
  • .net core 线程锁,互斥锁,自旋锁,混合锁
  • Celeborn和HDFS、YARN混合部署
  • 数据挖掘——集成学习
  • 华为OD机试真题---服务器广播
  • MySQL 03 章——基本的SELECT语句
  • 【UE5 C++课程系列笔记】20——共享指针的简单使用
  • MySQL 备份方案设计之准备事项
  • 服务器主机网络测试命令
  • 双目的一些文章学习
  • 企业二要素如何用java实现
  • HarmonyOS-面试整理
  • vue,使用unplugin-auto-import避免反复import,按需自动引入
  • 解释下torch中的scatter_add_
  • ACL的注意事项
  • Kafka集群部署与安装
  • 爱死机第四季(秘密关卡)4KHDR国语字幕
  • Redis - 5 ( 18000 字 Redis 入门级教程 )
  • @Cacheable 注解爆红(不兼容的类型。实际为 java. lang. String‘,需要 ‘boolean‘)
  • 如何在notepad++里面,修改注释颜色
  • 2021年福建公务员考试申论试题(县级卷)
  • 4.Web安全——JavaScript基础
  • Unity2022接入Google广告与支付SDK、导出工程到Android Studio使用JDK17进行打包完整流程与过程中的相关错误及处理经验总结