Created
June 15, 2018 19:05
-
-
Save thehappybug/88342c122cfb1df9f14c9a10fb4926e4 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>; | |
export function withAppContext< | |
P extends { appContext?: AppContextInterface }, | |
R = Omit<P, 'appContext'> | |
>( | |
Component: React.ComponentClass<P> | React.StatelessComponent<P> | |
): React.SFC<R> { | |
return function BoundComponent(props: R) { | |
return ( | |
<AppContextConsumer> | |
{value => <Component {...props} appContext={value} />} | |
</AppContextConsumer> | |
); | |
}; | |
} |
Try writing <Component {...props as P} appContext={value} />
.
Try writing
<Component {...props as P} appContext={value} />
.
Can't work for me
Conversion of type 'R' to type 'P' may be a mistake because neither type sufficiently overlaps with the other. If this was intentional, convert the expression to 'unknown' first.
'R' is assignable to the constraint of type 'P', but 'P' could be instantiated with a different subtype of constraint '{ appContext?: AppContextInterface | undefined; }'.ts(2352)
guys do you have some updates for fixing this ???
I was able to get this working as of React 16.12
import GlobalContext, {ContextConsumer} from "../Props/GlobalContext";
import React, {FunctionComponent} from "react";
type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;
export function WithContext<
P extends { global?: GlobalContext },
R = Omit<P, 'global'>
>(
Component: React.ComponentClass<P> | FunctionComponent<P>
): FunctionComponent<R> {
return function BoundComponent(props: R) {
return (
<ContextConsumer>
{value => value && <Component {...props as unknown as P} global={value} />}
</ContextConsumer>
);
};
}
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
I have a error.
Type 'R & { appContext: AppContextInterface; }' is not assignable to type 'IntrinsicAttributes & P & { children?: ReactNode; }'.
Type 'R & { appContext: AppContextInterface; }' is not assignable to type 'P'. TS2322