字符串枚举,如打字稿中的类型
String enum like type in typescript
我正在寻找可以迭代的字符串枚举。
到目前为止我尝试了什么:
字符串联合类型:
type t = "p1" | "p2" | "p3"
问题:无法迭代
枚举:
enum t { p1, p2, p3 }
问题:不能有字符串枚举
对象:
const t = {p1: "p1", p2: "p2", p3: "p3"}
问题:无法强类型化应为 "p1"、"p2" 或 "p3"
的变量
我可以使用对象和字符串联合类型或枚举和映射,但我最终会重复很多次。获取可以在打字稿中迭代的字符串枚举的正确方法是什么?
我不确定为什么您需要该值是一个字符串。请注意,您可以使用 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"
我正在寻找可以迭代的字符串枚举。
到目前为止我尝试了什么:
字符串联合类型:
type t = "p1" | "p2" | "p3"
问题:无法迭代
枚举:
enum t { p1, p2, p3 }
问题:不能有字符串枚举
对象:
const t = {p1: "p1", p2: "p2", p3: "p3"}
问题:无法强类型化应为 "p1"、"p2" 或 "p3"
的变量我可以使用对象和字符串联合类型或枚举和映射,但我最终会重复很多次。获取可以在打字稿中迭代的字符串枚举的正确方法是什么?
我不确定为什么您需要该值是一个字符串。请注意,您可以使用 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"