TypeScriptadvanced
Mapped types with key remapping via as
type Getters<T> = {
[K in keyof T as `get${Capitalize<string & K>}`]: () => T[K];
};
export const toGetters = <T extends object>(obj: T): Getters<T> => {Turn a plain object type into a matching set of getter methods, renaming every key to getX without writing each one by hand.