Подтвердить что ты не робот

React/TypeScript: расширение компонента дополнительными свойствами

Я пытаюсь использовать реакцию, чтобы воссоздать компоненты моего тока (написанные на чистом машинописи), но я не могу найти способ дать дополнительный реквизит компоненту, расширяющему другой.

export interface DataTableProps {
    columns: any[];
    data: any[];
}

export class DataTable extends React.Component<DataTableProps, {}> {
   render() {
       // -- I can use this.props.columns and this.props.data --
   }
}

export class AnimalTable extends DataTable {
    render() {
       // -- I would need to use a this.props.onClickFunction -- 
    }
}

Моя проблема в том, что мне нужно дать AnimalTable некоторые реквизиты, которые не имеют отношения к DataTable. Как я могу это сделать?

4b9b3361

Ответ 1

Вам понадобится создать DataTable generic, чтобы вы могли использовать интерфейс, который расширяет DataTableProps:

export interface AnimalTableProps extends DataTableProps {
    onClickFunction: Function;
}

export class DataTable<T extends DataTableProps> extends React.Component<T, {}> { }

export class AnimalTable extends DataTable<AnimalTableProps> {
    render() {
        // this.props.onClickFunction should be available
    }
}

Ответ 2

Самое элегантное решение, которое я нашел (без дополнительного универсального класса), это

interface IBaseProps {
    name: string;
}

class Base<P> extends React.Component<P & IBaseProps, void>{

}

interface IChildProps extends IBaseProps {
    id: number;
}

class Child extends Base<IChildProps> {
    render(): JSX.Element {
        return (
            <div>
                {this.props.id}
                {this.props.name} 
            </div>
        );
    }
}