在TypeScript中,String enum类似于类型。
在TypeScript中,String enum类似于类型。
我正在寻找一个可以迭代的字符串枚举类型。\n我尝试过的方法有:\n字符串联合类型:\n
type t = "p1" | "p2" | "p3"
\n问题:无法迭代\n枚举:\n
enum t { p1, p2, p3 }
\n问题:无法使用字符串枚举\n对象:\n
const t = {p1: "p1", p2: "p2", p3: "p3"}
\n问题:无法对应一个只能是\"p1\"、\"p2\"或\"p3\"的变量进行强类型定义\n我可以使用对象和字符串联合类型,或者枚举和映射,但这样会让代码重复很多。在TypeScript中,有什么正确的方法可以获得可以迭代的字符串枚举?
在使用Typescript中,有时需要使用类似于String枚举类型的功能。这种需求的原因可能是为了方便根据枚举的名称或值来进行操作。在Typescript中,枚举的值可以通过名称获取,也可以通过枚举值获取名称。
解决这个问题的方法是可以通过枚举的名称或值进行操作。例如,可以通过t.p1
或t["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"
还有一个相关的问题是如何在枚举中迭代。可以参考这个回答来进行迭代操作。