当前位置:  开发笔记 > 编程语言 > 正文

为什么TS不使用符号作为枚举

如何解决《为什么TS不使用符号作为枚举》经验,为你挑选了1个好方法。

ES6符号非常适合枚举,因为它们可以避免碰撞.我认为TS enum类型使用符号作为枚举target:'es6',但它没有:

enum Role {Employee, Manager, Admin}
let role: Role = Role.Employee;

转向

var Role;
(function (Role) {
    Role[Role["Employee"] = 0] = "Employee";
    Role[Role["Manager"] = 1] = "Manager";
    Role[Role["Admin"] = 2] = "Admin";
})(Role || (Role = {}));
let role = Role.Employee;

任何想法为什么?有这样的方法Role.Employee0什么价值,0并且可以使用任何其他具有值的枚举而不是Role.Employee在运行时?



1> Harshal Pati..:

ES Symbol是关于唯一性的,而TypeScript enum是关于命名常量的.作为独特的并且是恒定的是两个不同的东西.

我们可以序列化enum结构,因为它本质上只是一个对象.但这Symbol是一个不同的故事.你无法序列化它.

因此,当我们说恒定时,我们实际上意味着使用该值,正如它所enum提供的那样.但这Symbol不是您想要使用的值.它更像是我们希望制作的身份,没有人能够克隆/复制.

常数是保持不变的东西.因此,一些可以在两个不同环境中运行的代码,比如Node.js和Browser,都会理解常量值是相同的(简单来说,开发人员正在为常量创建一个值,例如字符串或数字).但是Symbol,想象一下,它没有任何有价值的概念.如果我们尝试将它用作值,那么这意味着它是两个独立的东西(因为运行时正在创建这些Symbol值,而不是开发人员).

在相同的光,如果你已经使用终极版,我们宁愿stringSymbol代表我们的行动.

此外,在TypeScript的情况下,enum也可以用作ambientsubstitution值.在这种情况下,它是枚举值重要的唯一编译器.在编译期间,type erasure可以enum完全删除引用.现在,这是使用Symbol无法做到的事情.创建Symbol仅运行时活动.因此,如果我们使用Symbolenum,那么我们失去的能力enum编译时只功能.

因此,不使用Symbolenum似乎是一个明智的选择.

推荐阅读
手机用户2502852037
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有