Переименование ключей через as в отображаемых типах

Изменения в новых версиях / TypeScript 4.1

// *** before: ***
type Getters<T> = {
    [K in keyof T]: () => T[K];
    // the key stays as it is - "get" plus the field name cannot be built
};

// *** in version 4.1: ***
type GettersRenamed<T> = {
    [K in keyof T as `get${Capitalize<string & K>}`]: () => T[K];
};
interface Person { name: string; age: number; }
type PersonGetters = GettersRenamed<Person>;
// { getName: () => string; getAge: () => number }