import React, { ComponentType, ReactNode, Component } from 'react'; interface Mapper { (inProps: In): Out; } interface MapPropsOutput { (comp: ComponentType): ComponentType; } export function mapProps( mapper: Mapper, ): MapPropsOutput { return function mapPropsHoc(Comp) { class MapPropsHoc extends Component { render(): ReactNode { const mappedProps = mapper(this.props); // TODO Not really sure why this is needed, but it is return ; } static displayName = `mapProps(${ Comp.displayName || Comp.name || 'Component' })`; } return MapPropsHoc; }; }