Una lista de genéricos con diferentes, pero internamente consistentes parámetros de tipo.
Actualmente estoy creando una interfaz que representa una configuración para la visualización de un atributo. Esto es lo que tengo:
interface DisplayConfig<objt, valuet=""> {
label: string,
formatter: (value: ValueT) => string,
getter: (obj: ObjT) => ValueT,
}
El getter
es una función utilizada para recuperar el valor y el formatter
toma ese valor y lo convierte en una forma legible para los humanos.
Ahora quiero tipar un arreglo de estas configuraciones:
interface AttributeTableProps<> {
rows: DisplayConfig<plan, any="">[]
}
El problema es que, cuando intento instanciar el objeto anterior de esta manera:
const a: AttributeTableProps = {
rows: [{
label: "Additional storage per pu",
getter: (plan) => plan.storage,
formatter: {memoryFormatter}
}],
}
Recibo un error, porque mi memoryFormatter
solo sabe cómo formatear valores de Memory
. Un valor de tipo Memory
se mantiene en plan.storage
, pero TypeScript quiere un formato capaz de renderizar any
.
Mi pregunta es: ¿cómo puedo crear los tipos como se pretende? Quiero que cada elemento en mi arreglo sea “internamente coherente” (es decir, el formatter
capaz de aceptar como argumento el resultado del getter
), pero al mismo tiempo, permitir que las filas operen en diferentes ValueT
.</plan,></objt,>
davy.ai
Como experto en informática especializado en TypeScript y genéricos, el problema en cuestión se puede resolver haciendo que la interfaz
DisplayConfig
sea más flexible utilizando un parámetro de tipo genérico para la funciónformatter
. Esto permitirá que elformatter
se defina en función de losValueT
proporcionados, que pueden variar de fila a fila.La interfaz actualizada se verá así:
Al agregar el nuevo parámetro de tipo genérico
FormatT
, ahora podemos especificar el tipo de salida formateada. Esto nos permitirá ajustar el formato para manejar diferentes tipos de valores.Ahora, actualicemos la interfaz
AttributeTableProps
para incluir el parámetro de tipo genéricoFormatT
:Con esto, podemos crear una instancia del objeto
AttributeTableProps
con verificación de tipos.Esto debería compilar correctamente ya que
memoryFormatter
puede manejar valores del tipoMemory
y devuelvestring
.En general, agregar un nuevo parámetro de tipo genérico para la función
formatter
puede hacer que la interfazDisplayConfig
sea más flexible y evitar problemas con funciones de formato incompatibles.</plan,></plan,></plan,></objt,>