reactjs - React HOC-fel vid användning av TypeScript


Jag försöker skapa en wrapper-funktion för att göra React context consumers till en HOC, skriven i TypeScript. Detta är vad jag har hittills:

import { ComponentType, ConsumerProps, createElement } from 'react';

type Omit<T, K> = Pick<T, Exclude<keyof T, K>>;

export const createConsumer = <S>(
  consumer: ComponentType<ConsumerProps<S>>
) => <P>(
  component: ComponentType<P & S>
) => (
  props: Omit<P, keyof S>
) => createElement(consumer, {
  children: (state: S) => createElement(component, {
    ...props as any,
    ...state as any
  })
});

Allt fungerar bra, förutom när man nestar HOCs. När jag gör det tar den bara upp props från den sista HOC och ignorerar alla andra.

import * as React from 'react';
import { createContext } from 'react';

import { createConsumer } from './createConsumer';

const firstContext = createContext({ first: 'value' });
const withFirst = createConsumer(firstContext.Consumer);

const secondContext = createContext({ second: 'value' });
const withSecond = createConsumer(secondContext.Consumer);

const Component = withFirst(withSecond(({ first, second }) => (
//                                        ^^^^^
// TS2459: Type '{ second: string; } & { children?: ReactNode; }' has no property 'first' and no string index signature.
  <div/>
)));

Vet någon vad problemet är?