// Definitions by: Junyoung Clare Jang // TypeScript Version: 2.3 import { ComponentType, ComponentClass, Ref, SFC } from 'react'; import { ClassInterpolation } from 'create-emotion'; import { Interpolation, StyledOptions, StyledOtherProps, StyledStatelessProps, Themed, } from './common'; export interface StyledComponentMethods { withComponent( tag: T, options?: StyledOptions, ): StyledOtherComponent; withComponent( component: SFC, options?: StyledOptions, ): StyledStatelessComponent; withComponent( component: ComponentClass | ComponentType, options?: StyledOptions, ): StyledOtherComponent; } export interface StyledStatelessComponent extends ComponentClass>, ClassInterpolation, StyledComponentMethods {} export interface StyledOtherComponent extends ComponentClass>>, ClassInterpolation, StyledComponentMethods {} export type StyledComponent = | StyledStatelessComponent | StyledOtherComponent ; export interface CreateStyledStatelessComponent { ( ...args: Array>> ): StyledStatelessComponent; } export interface CreateStyledOtherComponent { ( ...args: Array>> ): StyledOtherComponent; } export interface CreateStyledFunction { ( tag: T, options?: StyledOptions, ): CreateStyledOtherComponent; ( component: SFC, options?: StyledOptions, ): CreateStyledStatelessComponent; ( component: ComponentClass | ComponentType, options?: StyledOptions, ): CreateStyledOtherComponent; } export type CreateStyledShorthands = { [T in keyof JSX.IntrinsicElements]: CreateStyledOtherComponent; }; export interface CreateStyled extends CreateStyledFunction, CreateStyledShorthands {}