25 lines
1.1 KiB
Plaintext
25 lines
1.1 KiB
Plaintext
// @flow
|
|
import * as React from 'react';
|
|
|
|
export type ClassComponent<Props, State> =
|
|
Class<React.Component<Props, State>>;
|
|
|
|
export type ClassComponentWithDefaultProps<DefaultProps, Props, State> =
|
|
ClassComponent<Props, State> & {defaultProps: DefaultProps};
|
|
|
|
export type ComponentWithDefaultProps<DefaultProps, Props> =
|
|
React.ComponentType<Props> & {defaultProps: DefaultProps};
|
|
|
|
/**
|
|
* Here is a generic type for HOCs:
|
|
*
|
|
* It takes two type parameters: RequiredProps and ProvidedProps
|
|
*
|
|
* RequiredProps: The final wrapped component will need RequiredProps, in addition to its own props
|
|
* ProvidedProps: The final wrapped component will not need ProvidedProps, because the HOC will provide them to the inner component
|
|
*/
|
|
export type HigherOrderComponent<RequiredProps, ProvidedProps> =
|
|
& (<OriginalProps, DefaultProps>(component: ComponentWithDefaultProps<DefaultProps, OriginalProps>) =>
|
|
React.ComponentType<RequiredProps & $Diff<OriginalProps, ProvidedProps & DefaultProps>>)
|
|
& (<OriginalProps>(component: React.ComponentType<OriginalProps>) => React.ComponentType<RequiredProps & $Diff<OriginalProps, ProvidedProps>>);
|