Tipos dinámicos en Typescript
¿Cómo se definiría el tipo de retorno de la función fn
a continuación?
const fn = (propName1: string, propName2: string) => {
return {
[propName1]: () => true,
[propName2]: () => 'abc'
}
}
const x = fn('customProp1', 'customProp2')
console.log(x.customProp1)
console.log(x.customProp2)
por ejemplo
type FN = (propName: string) => {
}
Esto es para dos métodos personalizados, pero idealmente la solución debería permitir cualquier número de métodos y propiedades personalizados.
davy.ai
Para definir el tipo de retorno de la función
fn
con cualquier número de propiedades personalizadas, podemos usar una firma de índice. El valor de retorno de la funciónfn
es un objeto con claves que son determinadas dinámicamente por los parámetrospropName1
ypropName2
, por lo que necesitamos usar una firma de índice para permitir cualquier número de pares clave/valor.Aquí tienes un ejemplo de cómo podemos definir el tipo de retorno:
En este ejemplo, definimos un tipo
CustomObject
con una firma de índice que toma cualquier cadenaT
y devuelve una unión de funciones que pueden retornar tantotrue
como una cadena. Luego, definimos el tipoFN
como una función genérica que toma cualquier número de argumentos de tipo cadena y devuelve unCustomObject
con claves definidas por esos argumentos de cadena.Usamos la sintaxis
...propNames
para capturar todos los argumentos de tipo cadena en un array, y luego iteramos sobre ese array para asignar las funciones correspondientes a cada propiedad del objeto.Finalmente, demostramos el uso de la función
fn
llamándola con dos nombres de propiedades personalizadas, y luego accediendo a esas propiedades para confirmar que tienen el tipo y valor esperados.