在TypeScript中,String enum类似于类型。

21 浏览
0 Comments

在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中,有什么正确的方法可以获得可以迭代的字符串枚举?

0
0 Comments

在使用Typescript中,有时需要使用类似于String枚举类型的功能。这种需求的原因可能是为了方便根据枚举的名称或值来进行操作。在Typescript中,枚举的值可以通过名称获取,也可以通过枚举值获取名称。

解决这个问题的方法是可以通过枚举的名称或值进行操作。例如,可以通过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"

还有一个相关的问题是如何在枚举中迭代。可以参考这个回答来进行迭代操作。

0