gpt4 book ai didi

json - 基于 Typescript 字符串的枚举

转载 作者:搜寻专家 更新时间:2023-10-30 21:07:06 28 4
gpt4 key购买 nike

所以我已经阅读了所有关于 String Based Enums in Typescript 的帖子,但我找不到满足我要求的解决方案。那些将是:

  • 提供代码完成的枚举
  • 可以迭代的枚举
  • 不必指定一个元素两次
  • 基于字符串

到目前为止,我在 typescript 中看到的枚举的可能性是:

  1. enum MyEnum {bla, blub}:这在基于字符串方面失败,所以我不能简单地从基于字符串的 JSON 中读取...
  2. 类型 MyEnum = 'bla' | 'blub':不可迭代且无代码完成
  3. 自己做 class MyEnum { static get bla():string{return "bla"} ; static get blub():string{return "blub"}}: 指定元素两次

问题来了:

  1. 没有办法同时满足这些要求吗?如果没有,将来有可能吗?
  2. 为什么他们不制作基于字符串的枚举
  3. 有人遇到过类似的问题吗?您是如何解决的?

最佳答案

我认为以类 C 风格用数字实现 Enum 很好,因为 Enum(类似于 Symbol)是通常用于声明在开发时唯一可识别的值。机器如何在运行时表示该值并不真正关心开发人员。

但是我们开发人员有时想要的(因为我们都很懒惰,但仍然想拥有所有的好处!),是将 Enum 用作 API 或使用不与我们共享 Enum 的 API,即使 API 本质上是 Enum 因为属性的有效值仅为 foobar

我想这就是为什么某些语言具有基于字符串的 Enums 的原因:)

TypeScript 如何处理枚举

如果您查看转换后的 JavaScript,您会发现 TypeScript 只是使用普通的 JavaScript 对象来实现 Enum。例如:

enum Color {
Red,
Green,
Blue
}

将被转译为:

{
0: "Red",
1: "Green",
2: "Blue",
Blue: 2,
Green: 1,
Red: 0
}

这意味着您可以像 Color[Color.Red] 一样访问字符串值。您仍然可以完成代码,并且不必两次指定值。 但是您不能只执行Object.keys(Color) 来遍历Enum,因为值在对象上存在“两次”。

关于json - 基于 Typescript 字符串的枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39287818/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com