javascript - Varför representeras icke-litterala strängindex i Typescript enum-värden som numeriska strängar och inte som siffror?


Om jag definierar en enum på det här sättet:

enum MyEnum {
    First,
    Second,
};

...och jag försöker få värdet för elementet "First" på detta sätt:

const value = MyEnum["First"];

...då är typen av 'value' 'number' (som rapporteras av 'typeof value'). Men om jag försöker få värdet på detta sätt:

const key: string = "First";
const value = MyEnum[key as any];

...då är typen av 'value' 'string'.

Varför är det så?

Jag misstänker att det har något att göra med delen 'as any' eftersom om jag bara utelämnar 'as any', då är 'value' ett nummer, men då skriker TypeScript-kompilatorn åt mig eftersom 'Element har implicit typen any eftersom indexuttrycket inte är av typen number'

Om mitt index är ett strängvärde (inte ett litteral), är detta det 'bästa' sättet att få värdet som ett nummer?

const value = Number(MyEnum[key as any]);

Tack!