Enum.GetValues(typeof(TEnum)) i Typescript
I Typescript skulle jag vilja få alla värden av en enum-typ i en array. Motsvarigheten i C# har varit denna:
public static TEnum[] GetValues<TEnum>() where TEnum : Enum
{
return Enum.GetValues(typeof(TEnum))
.OfType<TEnum>()
.ToArray();
}
Vad är den bästa översättningen av denna metod till Typescript så att en möjlig användning skulle vara:
const allCountries: Country[] = GetEnumValues<Country>();
Uppdatering: Jag använder Typescript 3.9.4 och det är inget problem att använda en nyare version.
Svar #1
Det kan enkelt göras. Du kan bara inte använda det med const enum. Typescript kommer att klaga om du använder det, eftersom det inte är tillgängligt vid körning.
type EnumLike = Record<string, string | number>
function getEnumValues<T extends EnumLike>(en: T): Array<T[keyof T]> {
return Object.keys(en)
// This filters the reverse mappings: https://www.typescriptlang.org/docs/handbook/enums.html#reverse-mappings
// Without the filter, numeric values are added to the array twice. Once as a string and again as a number
.filter(k => !isFinite(Number(k)))
.map(k => en[k]) as Array<T[keyof T]>;
}
exempel på användning:
enum ExampleEnum {
a = 1,
b = 'two'
}
console.log(getEnumValues(ExampleEnum)) // [1, 'two']
Se även som exempel: https://stackblitz.com/edit/typescript-z2swch
