Búsqueda de sitios web

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

Artículos relacionados