Generar dinámicamente el tipo de retorno basado en un parámetro en TypeScript
Tengo una función que recibe un arreglo de cadenas y devuelve un objeto cuyas claves son las cadenas y cada valor es undefined:
function getInitialCharacteristics(names: string[]): ??? {
return names.reduce((obj, name) => ({ ...obj, [name]: undefined }), {});
}
Uso de ejemplo:
const result = getInitialCharacteristics(["hello", "world"]);
// result == { hello: undefined, world: undefined }
Ahora me pregunto cómo puedo definir el valor de retorno adecuado para getInitialCharacteristics usando TypeScript. Tendría que usar genéricos o de alguna manera generar ese tipo dinámicamente. ¿Es eso posible?
Respuesta #1
Si vas a llamar a esta función con constantes o literales de cadena, TypeScript puede ayudarte a obtener un tipo más estricto para el objeto de retorno
function getInitialCharacteristics<T extends string>(names: T[]): Record<T, undefined>
function getInitialCharacteristics(names: string[]): Record<string, undefined> {
return names.reduce((obj, name) => ({ ...obj, [name]: undefined }), {});
}
const result = getInitialCharacteristics(["hello", "world"]);
result.hello //ok
result.world //ok
result.helloo //err
Enlace del parque
