2016-06-08 88 views
1

我正在寻找可迭代的字符串枚举。打字稿中的字符串枚举类型

我试了一下,到目前为止:

字符串的联合类型:

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

问题:无法进行迭代

枚举:

enum t { p1, p2, p3 } 

问题:不能有字符串枚举

对象:

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

问题:不能强类型,应该是“P1”,“P2”,或“P3”变量

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

+0

这是JavaScript,它有字符串,数字,对象作为类型。它也不是一种静态类型的语言。因此,您可能需要重新考虑您要解决的问题,以及是否需要强大的打字功能。 –

+0

@CallumLinington我也给它打了标签。 Typescript是javascript的一个超集+ – 2426021684

+0

那么,它改变了一切...看到[这里](https://basarat.gitbooks.io/typescript/content/docs/enums.html) –

回答

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" 
+0

你可以遍历一个枚举吗? – 2426021684

+0

@ 2426021684当然,请参阅[此答案](http://stackoverflow.com/a/21294925/1715579)。 –