Given the following:
enum FooKeys {
FOO = \'foo\',
BAR = \'bar\',
}
I\'d like to make an interface like this one, but instead of defini
@hackape 's solution is great, but I found minimal duplication extending his solution as below:
type ReverseMap> = {
[V in T[keyof T]]: {
[K in keyof T]: T[K] extends V ? K : never;
}[keyof T];
}
const Map = {
'FOO': "foo" as "foo",
'BAR': "bar" as "bar",
}
const reverseMap: ReverseMap = Object.entries(Map).reduce((rMap, [k, v]) => {
rMap[v] = k;
return rMap;
}, {} as any);
export type Values = keyof typeof reverseMap; // 'foo' | 'bar';
ReverseMap implementation is well explained here