¿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?