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

问题描述 投票:0回答:1

编辑: TypeScript 现在有 字符串枚举

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

到目前为止我尝试过的:

字符串联合类型:

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

问题:无法迭代

枚举:

enum t { p1, p2, p3 }

问题:不能有字符串枚举

对象:

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

问题:无法强类型化应为“p1”、“p2”或“p3”的变量

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

javascript enums typescript iterable
1个回答
1
投票

我不确定为什么你需要该值是一个字符串。请注意,您可以使用

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"
© www.soinside.com 2019 - 2024. All rights reserved.