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

Qua*_*ali 15 typescript

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

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)


Qua*_*ali 8

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

  • 然而,字符串枚举没有双向映射 (6认同)