字符串枚举类似于打字稿中的类型[重复]

Posted

技术标签:

【中文标题】字符串枚举类似于打字稿中的类型[重复]【英文标题】:String enum like type in typescript [duplicate] 【发布时间】:2016-10-09 03:04:26 【问题描述】:

我正在寻找一个可以迭代的字符串枚举。

到目前为止我尝试了什么:

字符串联合类型:

type t = "p1" | "p2" | "p3"

问题:无法迭代

枚举:

enum t  p1, p2, p3 

问题:不能有字符串枚举

对象:

const t = p1: "p1", p2: "p2", p3: "p3"

问题:不能强类型化应该是“p1”、“p2”或“p3”的变量

我可以使用对象和字符串联合类型或枚举和映射,但我最终会重复自己很多次。获取可以在打字稿中迭代的字符串枚举的正确方法是什么?

【问题讨论】:

这是javascript,它有字符串、数字、对象作为类型。它也不是静态类型语言。因此,您可能需要重新考虑您在此处尝试解决的问题,以及您是否需要强类型。 @CallumLinington 我也将它标记为打字稿。 Typescript 是 javascript 的类型化超集 嗯,这改变了一切......见here 您遇到了 Javascript 的限制,它没有用于键入或枚举的表示。请参阅 David Sherret 发布的链接,了解如何在 Javascript 中表示。 【参考方案1】:

我不确定您为什么需要将值作为字符串。请注意,您可以使用t.p1t["p1"] 从其名称中获取枚举值,并且您可以使用t[0] 从其枚举值中获取其名称。

例如:

enum t  p1, p2, p3 

function foo(x : t) 
    console.log(`value: $x, name: "$t[x]"`);

foo(t.p1);      // value: 0, name: "p1"
foo(t["p1"]);   // value: 0, name: "p1"

但如果你真的需要接受字符串值,你总是可以这样做(是的,这会在一段时间后变得非常多余):

function foo(x : t | "p1" | "p2" | "p3") 
    if (typeof x == "string") x = t[x];
    console.log(`value: $x, name:"$t[x]"`);


foo("p1");      // value: 0, name: "p1"

【讨论】:

你能遍历一个枚举吗? @2426021684 当然,请参阅this answer。

以上是关于字符串枚举类似于打字稿中的类型[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在打字稿中键入枚举变量?

使用枚举和泛型在打字稿中获取星期几

在打字稿中扩展枚举

在打字稿中使用枚举作为接口键

如何在打字稿中访问枚举的名称

打字稿:如何检查一个值是不是是有效的枚举键值? [复制]