Como inferir mapValues digitados usando pesquisas em texto datilografado?

Igual a:

Como inferir uma matriz digitada a partir de uma matriz de chave dinâmica em texto datilografado?

Eu estou olhando para digitar um objeto genérico que recebe um mapa de chaves arbitrárias para valores de pesquisa e retorna as mesmas chaves com valores digitados (como um _.mapValues digitado).

A capacidade de obter uma propriedade digitada singular de um objeto está documentada e funciona. Com matrizes, é necessário codificar sobrecargas para tuplas digitadas, mas, para objetos, estou recebendo um erro 'Assinatura de índice de cadeia 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' 
// }

Como isso pode ser implementado com texto datilografado?

questionAnswers(2)

yourAnswerToTheQuestion