Tipo genérico para obter chaves enum como string de união no texto datilografado?

Considere a seguinte enumeração datilografada:

enum MyEnum { A, B, C };

Se eu quiser outro tipo que seja as seqüências de caracteres unidas das chaves dessa enumeração, eu posso fazer o seguinte:

type MyEnumKeysAsStrings = keyof typeof MyEnum;  // "A" | "B" | "C"

Isto é muito útil.

Agora, quero criar um tipo genérico que opere universalmente em enums dessa maneira, para que eu possa dizer:

type MyEnumKeysAsStrings = AnyEnumKeysAsStrings<MyEnum>;

Eu imagino que a sintaxe correta para isso seria:

type AnyEnumKeysAsStrings<TEnum> = keyof typeof TEnum; // TS Error: 'TEnum' only refers to a type, but is being used as a value here.

Mas isso gera um erro de compilação: "'TEnum' refere-se apenas a um tipo, mas está sendo usado como um valor aqui."

Isso é inesperado e triste. Posso contornar isso da seguinte maneira, removendo o typeof do lado direito da declaração do genérico e adicionando-o ao parâmetro type na declaração do tipo específico:

type AnyEnumAsUntypedKeys<TEnum> = keyof TEnum;
type MyEnumKeysAsStrings = AnyEnumAsUntypedKeys<typeof MyEnum>; // works, but not kind to consumer.  Ick.

Não gosto dessa solução alternativa, porque isso significa que o consumidor deve se lembrar de fazer essa especificação nojenta do tipo de genérico.

Existe alguma sintaxe que me permita especificar o tipo genérico como eu quero inicialmente, para ser gentil com o consumidor?

questionAnswers(1)

yourAnswerToTheQuestion