Desde que actualicé a la versión 3.5 de mecanografiado, tengo el mismo mensaje de error, no lo entiendo:

Tengo este componente de reacción

export const RouteWrapper = function RouteWrapper<
  P = { children?: ReactNode },
  TRoute extends RouteProps = Route
>(
  Wrapper: React.ComponentType<P>,
  RouteType: React.ComponentType<RouteProps> = Route,
  options: Partial<TRoute> = {},
  wrapperProps: P = ({} as unknown) as P
) {
  return function RouteWrapperResuslt({
    component: RouteComponent,
    path,
    exact,
    ...rest
  }: RouteWrapperProps<P, Partial<TRoute>>) {
    return (
      <RouteType
        path={path}
        exact={exact}
        {...options}
        component={(props: P) => (
          <Wrapper {...wrapperProps || {}}>
            <RouteComponent {...rest} {...props} />
          </Wrapper>
        )}
      />
    );
  };
};

Pero esta línea errores:

<Wrapper {...(wrapperProps || {})}>
  <RouteComponent {...rest} {...props} />
</Wrapper>

Con este error

Type '{ children: Element; }' is not assignable to type 'P'.
  '{ children: Element; }' is assignable to the constraint of type 'P', but 'P' could be instantiated with a different subtype of constraint '{}'

Aquí hay un codesandbox con un ejemplo completo

3
dagda1 26 sep. 2019 a las 13:12

1 respuesta

La mejor respuesta

Ya que está pasando un objeto vacío, ¿por qué no lo lanza como una alternativa? Creo que esto debería funcionar para ti:

  Wrapper: React.ComponentType<P | {}>, // Line 23 index.tsx

El tipo {} solo permitirá un objeto vacío, por lo que debería cubrir bien sus dos casos.

7
Lucas 16 oct. 2019 a las 10:08