diff --git a/packages/mui-styled-engine-sc/src/index.d.ts b/packages/mui-styled-engine-sc/src/index.d.ts index f586612be64f6c..11f4e6a12a0d1f 100644 --- a/packages/mui-styled-engine-sc/src/index.d.ts +++ b/packages/mui-styled-engine-sc/src/index.d.ts @@ -292,32 +292,85 @@ export interface StyledConfig { // TODO: Add all types from the original StyledComponentWrapperProperties componentId?: string; displayName?: string; + label?: string; + target?: string; shouldForwardProp?: | ((prop: keyof O, defaultValidatorFn: (prop: keyof O) => boolean) => boolean) | undefined; } +/** Same as StyledConfig but shouldForwardProp must be a type guard */ +export interface FilteringStyledOptions { + componentId?: string; + displayName?: string; + label?: string; + shouldForwardProp?(propName: PropertyKey): propName is ForwardedProps; + target?: string; +} + // same as ThemedBaseStyledInterface in styled-components, but with added options & common props for MUI components export interface ThemedBaseStyledInterface< MUIStyledCommonProps extends object, MuiStyledOptions extends object, - T extends object, -> extends ThemedStyledComponentFactories { - ( + Theme extends object, +> extends ThemedStyledComponentFactories { + < + C extends React.ComponentClass>, + ForwardedProps extends keyof React.ComponentProps = keyof React.ComponentProps, + >( component: C, - options?: StyledConfig & MuiStyledOptions, - ): ThemedStyledFunction< - StyledComponentInnerComponent, - T, - StyledComponentInnerOtherProps & MUIStyledCommonProps, - StyledComponentInnerAttrs + options: FilteringStyledOptions, ForwardedProps> & MuiStyledOptions, + ): CreateStyledComponent< + Pick, ForwardedProps> & MUIStyledCommonProps, + {}, + { + ref?: React.Ref>; + }, + Theme >; - >( - // unfortunately using a conditional type to validate that it can receive a `theme?: Theme` - // causes tests to fail in TS 3.1 + + >>( component: C, - options?: StyledConfig & MuiStyledOptions, - ): ThemedStyledFunction; + options?: StyledConfig & MUIStyledCommonProps> & MuiStyledOptions, + ): CreateStyledComponent< + PropsOf & MUIStyledCommonProps, + {}, + { + ref?: React.Ref>; + }, + Theme + >; + + < + C extends React.JSXElementConstructor>, + ForwardedProps extends keyof React.ComponentProps = keyof React.ComponentProps, + >( + component: C, + options: FilteringStyledOptions, ForwardedProps> & MuiStyledOptions, + ): CreateStyledComponent, ForwardedProps> & MUIStyledCommonProps, {}, {}, Theme>; + + >>( + component: C, + options?: StyledConfig & MUIStyledCommonProps> & MuiStyledOptions, + ): CreateStyledComponent & MUIStyledCommonProps, {}, {}, Theme>; + + < + Tag extends keyof JSX.IntrinsicElements, + ForwardedProps extends keyof JSX.IntrinsicElements[Tag] = keyof JSX.IntrinsicElements[Tag], + >( + tag: Tag, + options: FilteringStyledOptions & MuiStyledOptions, + ): CreateStyledComponent< + MUIStyledCommonProps, + Pick, + {}, + Theme + >; + + ( + tag: Tag, + options?: StyledConfig & MuiStyledOptions, + ): CreateStyledComponent; } export type CreateMUIStyled<