我需要獲取字符串文字的所有可能值的完整列表。獲取字符串文字類型值的數組
type YesNo = "Yes" | "No";
let arrayOfYesNo : Array<string> = someMagicFunction(YesNo); //["Yes", "No"]
有什麼辦法可以解決這個問題嗎?
我需要獲取字符串文字的所有可能值的完整列表。獲取字符串文字類型值的數組
type YesNo = "Yes" | "No";
let arrayOfYesNo : Array<string> = someMagicFunction(YesNo); //["Yes", "No"]
有什麼辦法可以解決這個問題嗎?
打字稿2.4是finally released。在字符串枚舉的支持下,我不再需要使用字符串文字,並且因爲typescript枚舉被編譯爲javascript,所以我可以在運行時訪問它們(與number enums的方法相同)。
枚舉可以幫助你在這裏:
enum YesNo {
YES,
NO
}
interface EnumObject {
[enumValue: number]: string;
}
function getEnumValues(e: EnumObject): string[] {
return Object.keys(e).map((i) => e[i]);
}
getEnumValues(YesNo); // ['YES', 'NO']
type
聲明沒有創建,你可以在運行時使用的任何符號,它只會造成類型系統的別名。所以你無法將它用作函數參數。
如果你需要有字符串值YesNo
類型,你可以使用一個小技巧(因爲枚舉的字符串值都沒有的TS yet部分):
const YesNoEnum = {
Yes: 'Yes',
No: 'No'
};
function thatAcceptsYesNoValue(vale: keyof typeof YesNoEnum): void {}
然後你可以使用getEnumValues(YesNoEnum)
獲得可能的值爲YesNoEnum
,即['是','否']。這有點難看,但那是可行的。
說實話,我已經走了只是一個靜態變量是這樣的:
type YesNo = 'yes' | 'no';
const YES_NO_VALUES: YesNo[] = ['yes', 'no'];
謝謝,但這並不能幫助我。我需要枚舉是基於字符串的(這可能在Typescript 2.4中可能)。 – Quali
@Quali公平點,我增加了一種方法來解決這個問題。 –
當我嘗試@ KirillDmitrenko的建議。我的數組也允許非文字值。例如'const YES_NO_VALUES:YesNo [] = ['yes','no','maybe'];'' – jschank