¿Cómo inferir valores de mapa escritos usando búsquedas en mecanografiado?

Similar a

¿Cómo inferir una matriz escrita a partir de una matriz de claves dinámicas en mecanografiado?

Estoy buscando escribir un objeto genérico que reciba un mapa de claves arbitrarias para buscar valores, y devuelva las mismas claves con valores escritos (como un _.mapValues escrito).

La capacidad de obtener una propiedad con tipo singular de un objeto está documentada y funciona. Con las matrices, debe codificar las sobrecargas en tuplas escritas, pero para los objetos obtengo un error de 'Firma de índice de cadena duplicada'.

export interface IPerson {
    age: number;
    name: string;
}

const person: IPerson = {
    age: 1,
    name: ""
}

function getProperty<T, K extends keyof T>(o: T, name: K): T[K] {
    return o[name];
}

const a = getProperty(person, 'age');
// a: number

const n = getProperty(person, 'name');
// n: string

function getProperties<T, K extends keyof T>(obj: T, keys: { [key: string]: K }) {
    const def: { [key: string]: T[K] } = {};
    return Object.entries(keys).reduce((result, [key, value]: [string, K]) => {
        result[key] = getProperty(obj, value);
        return result;
    }, def);
}

const { a2, n2 } = getProperties(person, {
    a2: 'name',
    n2: 'age'
});

// Result:
// {
//     a2: string | number, 
//     n2: string | number
// }

// What I'm looking for:
// {
//     a2: string, 
//     n2: number' 
// }

¿Cómo se puede implementar esto con mecanografiado?

Respuestas a la pregunta(2)

Su respuesta a la pregunta