Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

185
Views
El objeto es de tipo 'desconocido'.ts(2571) en componente genérico

Tengo un componente Table con genéricos y uso un componente estático dentro de Table para componer columnas, también con genéricos.

El problema es que me gustaría que el componente Columna herede el tipo genérico pasado a la Tabla al ejecutar la función de datos, que obtiene el resultado que se le pasa.

Sé que escribir explícitamente funcionará, por ejemplo:

<Table.Column<TableItem> data={(item) => item.name} />

La verdadera pregunta es: ¿Es posible realizar este tipo de inferencia desde mi componente Tabla y pasarlo al componente Columna estática? Para que no tenga que agregar el tipo explícitamente a cada columna ...

ingrese la descripción de la imagen aquí

ARENA PARA REPRODUCIR, SOLO COMPONENTES MESA Y COLUMNA:

https://codesandbox.io/s/generic-table-column-r54lh?file=/src/App.tsx

about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Puede especificar el tipo de item :

 <Table.Column<TableItem> data={(item:[type goes here]) => item.name} />

Algunos ejemplos:

 <Table.Column<TableItem> data={(item:any) => item.name} /> // or even <Table.Column<TableItem> data={(item:{name:string;}) => item.name} />
about 4 years ago · Juan Pablo Isaza Report

0

Hay un problema en la tipificación de children , a saber, que está utilizando ReactElement , que no incluye la tipificación para la función JSX real, solo el elemento devuelto. Puede ver esto en su ejemplo, al notar que los siguientes niños covariantes y contravariantes pasan, a pesar de que sus children escriban:

 const MyDiv = (props:{myProp:string})=><div>{props.myProp}</div> const App = () => { return ( <Table<TableItem> keyExtractor={(item) => item.id} values={items}> <Table.Column header="Name" data={(item) => item.name} /> <Table.Column header="Surname" data={(item) => item.surname} /> <MyDiv myProp="me" /> <div /> </Table> ); };

PERO... No creo que ese sea realmente tu problema subyacente. El problema realmente es que desea que Typescript verifique que sus componentes secundarios se creen realmente a través de JSX específico con accesorios específicos, pero, de hecho, todo lo que Typescript hará actualmente es verificar que su JSX devuelva un JSX.Element válido. No verificará que la función que generó ese JSX.Element satisfaga un tipo particular o que el tipo de retorno de esa función sea un tipo específico de elemento con accesorios específicos.

Esta es una limitación de diseño que se analiza en este número abierto .

Creo que podría solucionar esto esencialmente definiendo su propio accesorio personalizado que tomó los accesorios para Table.Column y luego los pasó a Table.Column dentro de su componente Table . Por ejemplo, algo como columnProps: ColumnProps<T> como accesorio de Table . Sin embargo, no estoy seguro de que sea más fácil que simplemente proporcionar el tipo explícito a Table.Column .

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!