Estoy tratando de crear un archivo de declaración para el siguiente componente. Fue escrito con JS ES6.
function Column({ className, layout }) { function renderLayout() { return layout.map((item, index) => { const Component = item?.component || item; return ( <Component {...item?.options} // eslint-disable-next-line react/no-array-index-key key={index} /> ); }); } return ( <div className={className} > {renderLayout()} </div> ); }Ejemplo de declaración:
<Column className='test' layout={[ { component: Input, // It can use options options: { // It can have a custom shape. How to define types for options? first: 'test' } }, { component: Date, // It can use options options: { // It can have a custom shape. How to define types for options? second: 'test', newValue: { index: 3 } } } ]} /> <Column className='test' layout={[Input, Date]} />Tengo un problema con la propiedad de opciones . No sé cómo definir tipos para el objeto, ya que puede tener diferentes tipos según el componente con el que pase el usuario.
Entrada , Fecha : son ejemplos de componentes, se pueden reemplazar con cualquier otro componente.
Mi archivo de declaración.
interface ILayout { component?: React.ElementType; options?: any; // <---- Here is a problem. How to replace any with defined types. } interface ColumnProps { className?: string; layout?: (ILayout|React.ElementType)[]; } export class Column extends React.Component<ColumnProps> {}Puede hacer que ILayout sea un tipo condicional:
type ILayout = { component?: InputType; options?: OptionsForInputType } | { component?: DateType; options?: OptionsForDateType }