获取字符串文字类型值的数组

时间:2017-05-24 09:13:25

标签: typescript

我需要获取字符串文字的所有可能值的完整列表。

type YesNo = "Yes" | "No";
let arrayOfYesNo : Array<string> = someMagicFunction(YesNo); //["Yes", "No"]

有没有办法实现这个目标?

2 个答案:

答案 0 :(得分:8)

枚举可能对您有所帮助:

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'];

答案 1 :(得分:2)

Typescript 2.4是number enums。在字符串枚举的支持下,我不再需要使用字符串文字,因为typescript枚举被编译为javascript,我可以在运行时访问它们(与{{3}}的方法相同)。