我需要获取字符串文字的所有可能值的完整列表。
type YesNo = "Yes" | "No";
let arrayOfYesNo : Array<string> = someMagicFunction(YesNo); //["Yes", "No"]
有没有办法实现这个目标?
答案 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}}的方法相同)。