我需要获取字符串文字的所有可能值的完整列表.
type YesNo = "Yes" | "No";
let arrayOfYesNo : Array<string> = someMagicFunction(YesNo); //["Yes", "No"]
Run Code Online (Sandbox Code Playgroud)
有没有办法实现这个?
Kir*_*nko 10
枚举可以帮助您:
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']
Run Code Online (Sandbox Code Playgroud)
type声明不会创建您可以在运行时使用的任何符号,它只在类型系统中创建别名.所以你无法将它用作函数参数.
如果你需要有字符串值YesNo类型,你可以使用一个小技巧(因为枚举的字符串值不是TS的一部分尚未):
const YesNoEnum = {
Yes: 'Yes',
No: 'No'
};
function thatAcceptsYesNoValue(vale: keyof typeof YesNoEnum): void {}
Run Code Online (Sandbox Code Playgroud)
然后您可以使用getEnumValues(YesNoEnum)获取可能的值YesNoEnum,即['是','否'].这有点难看,但那有用.
说实话,我只会使用这样的静态变量:
type YesNo = 'yes' | 'no';
const YES_NO_VALUES: YesNo[] = ['yes', 'no'];
Run Code Online (Sandbox Code Playgroud)
Typescript 2.4终于发布了。在字符串枚举的支持下,我不再需要使用字符串文字,并且因为 typescript 枚举被编译为 javascript,我可以在运行时访问它们(与number enums 的方法相同)。