2016-06-08 160 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)。 –