Material-ui: withStyles рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП рдШрдЯрдХ рдореЗрдВ рдЯрд╛рдЗрдкрдкреНрд░рддрд┐ рдкреНрд░рдХрд╛рд░ рддреНрд░реБрдЯрд┐ ()

рдХреЛ рдирд┐рд░реНрдорд┐рдд 28 рд╕рд┐рддре░ 2017  ┬╖  55рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: mui-org/material-ui

рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ withStyles() рд╣реЙрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рд▓реМрдЯрд╛рдП рдЧрдП рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╕рдордп рдореБрдЭреЗ рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рд╣реИ:

Type '{}' is not assignable to type 'IntrinsicAttributes & IntrinsicClassAttributes<App> & Readonly<{ children?: ReactNode; }> & Reado...'.
  Type '{}' is not assignable to type 'Readonly<WithStyles<"main">>'.
    Property 'classes' is missing in type '{}'.
  • [x] рдореИрдВрдиреЗ рдЗрд╕ рднрдВрдбрд╛рд░ рдХреЗ рдореБрджреНрджреЛрдВ рдХреА рдЦреЛрдЬ рдХреА рд╣реИ рдФрд░ рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рдпрд╣ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдирд╣реАрдВ рд╣реИред

рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рдХрд╛рд░ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдореЗрдВ рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдЕрдкреЗрдХреНрд╖рд┐рддреН рд╡реНрдпрд╡рд╣рд╛рд░

рдиреАрдЪреЗ рджрд┐рдП рдЧрдП App рдШрдЯрдХ рдХреЛрдб рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдореБрдЭреЗ 1.0.0-рдмреАрдЯрд╛.10 рдореЗрдВ рдХрд┐рдП рдЧрдП рдкреНрд░рдХрд╛рд░ рдХреА рддреНрд░реБрдЯрд┐ рдХреЗ рдмрд┐рдирд╛ рдШрдЯрдХ <App /> рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░

рдиреАрдЪреЗ рджрд┐рдП рдЧрдП App рдШрдЯрдХ рдХреЛрдб рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдЙрдкрд░реЛрдХреНрдд рддреНрд░реБрдЯрд┐ рдореЗрдВ <App /> рдкрд░рд┐рдгрд╛рдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

рдХреЛрдб

import * as React from 'react';
import { withStyles } from 'material-ui/styles';

const styles = {
    main: {
        marginTop: 48,
        padding: 10,
    },
    foo: {
        margin: 0,
    },
};

interface Props {
    message: string;
};

type ClassNames = { classes: { [className in keyof typeof styles]: string } };

class App extends React.Component<Props & ClassNames> {
    render() {
        const { classes, message } = this.props;
        return (
            <div className={classes.main}>
                <div className={classes.foo} >
                    Hello World! {message}
                </div>
            </div>
        );
    }
}

export default withStyles(styles)(App);

рд╕рдВрджрд░реНрдн

1.0.0-рдмреАрдЯрд╛.10 рдореЗрдВ рдХреЛрдб рдиреЗ рдареАрдХ рдХрд╛рдо рдХрд┐рдпрд╛, рдЬрдм рдореИрдВрдиреЗ 1.0.0-рдмреАрдЯрд╛.12 рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд┐рдпрд╛ рддреЛ рдореБрдЭреЗ рдЯрд╛рдЗрдк рддреНрд░реБрдЯрд┐ рдорд┐рд▓реАред

рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рдореЗрдВ рдореИрдВрдиреЗ keyof typeof styles рдЪрд╛рд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рддрд╛рдХрд┐ рдореБрдЭреЗ рджреЛ рдмрд╛рд░ рд╡рд░реНрдЧ рдирд╛рдореЛрдВ рдХреА рд╕реВрдЪреА рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рди рд╣реЛ (рдореИрдВ рджреЛрд╣рд░рд╛рд╡ рдХреЛ рджреГрдврд╝рддрд╛ рд╕реЗ рдирд╛рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ)ред рдореИрдВрдиреЗ рдЕрдиреНрдп рд╡рд┐рд╡рд┐рдзрддрд╛рдУрдВ рдХреА рднреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ:

type ClassNames = WithStyles<keyof typeof styles>;

рдФрд░ рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рдХрд░рдирд╛ (рдЬреИрд╕рд╛ рдХрд┐ style.spec.tsx рдореЗрдВ рджреЗрдЦрд╛ рдЧрдпрд╛ рд╣реИ):

type ComponentClassNames = 'main' | 'foo';
type ClassNames = WithStyles<ComponentClassNames>;

рдореБрдЭреЗ рдЕрдм рднреА рд╡рд╣реА рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд┐рдЫрд▓реА рдкреНрд░рдХрд╛рд░ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдПрдХ рдШрдЯрдХ рд▓реМрдЯрд╛рдПрдЧреА рдЬрд┐рд╕рдХрд╛ рдкреНрд░реЛрдк рдкреНрд░рдХрд╛рд░ StyledComponentProps рдЬрд┐рд╕рдореЗрдВ рд╡реИрдХрд▓реНрдкрд┐рдХ classes рд╕рдВрдкрддреНрддрд┐ рд╣реЛрдЧреАред рдирдИ рдкрд░рд┐рднрд╛рд╖рд╛...

<P, C extends React.ComponentClass<P & StyledComponentProps<Names>>>(
    component: C
  ): C;

...рдЙрд╕реА рдкреНрд░рдХрд╛рд░ C рдХреЛ рдШрдЯрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ ClassNames рдЬреЛ рдХрд┐ рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рдЪрд┐рд╣реНрдирд┐рдд рдирд╣реАрдВ рд╣реИ, рд▓реМрдЯрд╛ рдШрдЯрдХ рдХреЗ рд▓рд┐рдП рдкреНрд░рдЪрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдореИрдВрдиреЗ рдпрд╣рд╛рдВ Partial<> рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рднрджреНрджрд╛ рд╣реИрдХ рд╣реИред

рдЖрдкрдХрд╛ рдкрд░реНрдпрд╛рд╡рд░рдг

| рдЯреЗрдХ | рд╕рдВрд╕реНрдХрд░рдг |
|--------------|------------|
| рд╕рд╛рдордЧреНрд░реА-рдпреВрдЖрдИ | 1.0.0-рдмреАрдЯрд╛.12 |
| рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ | резрел.рем.рез |
| рдмреНрд░рд╛рдЙрдЬрд╝рд░ | рдХреНрд░реЛрдо ремрез.реж.рейрезремрей.резрежреж |

discussion typescript

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореИрдВрдиреЗ recompose . рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рд▓ рдХрд┐рдпрд╛

рдЙрджрд╛рд╣рд░рдг

import { StyleRules, Theme, withStyles } from "material-ui/styles";
import * as React from "react";
import { compose } from "recompose";

interface IProps {
    classes?: any; // <-- add question mark
    text: string;
}

const styles = (theme: Theme): StyleRules => ({
    root: {

    },
});

@compose(
    withStyles(styles),
)
export class MyComponent extends React.Component<IProps> {
    render() {
        const { classes, text } = this.props;
        return (
            <div className={classes.root}>
                {text}
            </div>
        );
    }
}

рд╕рднреА 55 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

@cfilipov рдПрдХ рдШрдЯрдХ рд╡рд░реНрдЧ рдХреЛ StyledComponentProps рдмрдЬрд╛рдп WithStyles рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдпрджрд┐ рд╕рдЦреНрдд рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдВрдЪ рдореЛрдб рдореЗрдВ рдЖрдкрдХреЛ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЧреИрд░-рд╢реВрдиреНрдп рджрд╛рд╡рд╛ рдСрдкрд░реЗрдЯрд░ ! рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ classes ред рдХреНрд▓рд╛рд╕ рдбреЗрдХреЛрд░реЗрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ withStyles рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рд╕рдордЭреМрддрд╛ рд╣реИред рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдХреНрд▓рд╛рд╕ рдбреЗрдХреЛрд░реЗрдЯрд░ рдЗрд╕ рд╕реАрдорд╛ рд╕реЗ рдЧреНрд░рд╕реНрдд

  1. рдХреНрд▓рд╛рд╕ рдбреЗрдХреЛрд░реЗрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ withStyles рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рди рдХрд░реЗрдВ
  2. рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдЖрдк рд╕рдЬрд╛рдП рдЧрдП рдШрдЯрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рддрддреНрд╡ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╕рдордп рдПрдХ рдбрдореА classes рдкреНрд░реЛрдк рдкрд╛рд╕ рдХрд░реЗрдВ (рдкрд┐рдЫрд▓рд╛ рд╕рдордЭреМрддрд╛, рдЬреЛ рдпрдХреАрдирди рдЕрдзрд┐рдХ рдХрд╖реНрдЯрдкреНрд░рдж рдерд╛ )
  3. рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ classes рдХреЛ рдШрдЯрдХ рдХреЗ рдЕрдВрджрд░ рдЕрд╢рдХреНрдд рдорд╛рдирд╛ рдЬрд╛рдП, рдЬрд┐рд╕рд╕реЗ рдЖрдкрдХреЛ ! рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЬрд╛рдП рдЬрдм рдЖрдк рдЗрд╕рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ ( рд╡рд░реНрддрдорд╛рди рд╕рдордЭреМрддрд╛ ) рддрдХ

рдореИрдВ рдЕрддреНрдпрдзрд┐рдХ рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдпрджрд┐ рдЖрдкрдХреЗ рдШрдЯрдХ рдореЗрдВ рдХреЛрдИ рд░рд╛рдЬреНрдп рдирд╣реАрдВ рд╣реИ рддреЛ рдЖрдк рдПрдХ рд╕реНрдЯреЗрдЯрд▓реЗрд╕ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдХрдо рдкреНрд░рдХрд╛рд░ рдХреЗ рдПрдиреЛрдЯреЗрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдФрд░ рдЕрдзрд┐рдХ рдкреНрд░рдХрд╛рд░ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реЛрдЧрд╛:

export default withStyles(styles)<Props>(({ classes, message }) => (
  <div className={classes.main}>
    <div className={classes.foo}>
      Hello World! {message}
    </div>
  </div>
));

рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рдЖрдВрд╢рд┐рдХ <> рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛

рдпрджрд┐ рдЖрдк рдЙрд╕ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдлреЙрд▓реЛрдЕрдк рдХреЛ рдкрдврд╝рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ Partial<> рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рдпрджрд┐ рдЖрдк рдЙрд╕ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдлреЙрд▓реЛрдЕрдк рдХреЛ рдкрдврд╝рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдЖрдВрд╢рд┐рдХ<> рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рдореИрдВрдиреЗ Partial<> рд╕рдВрдмрдВрдз рдореЗрдВ рдЖрдкрдХреА рдЯрд┐рдкреНрдкрдгреА рджреЗрдЦреАред StyledComponentProps рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдПрдХ рд╣реА рдЪреАрдЬрд╝ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрддрд╛ рд╣реИ (рдпрд╣ рдЙрд╕ рдкрд░рд┐рднрд╛рд╖рд╛ рдореЗрдВ Partial<> рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ)ред рдЗрд╕рдХреЗ рд╕рд╛рде рдореЗрд░реА рдкрдХрдбрд╝ рдЕрдм рд╡рд░реНрдЧ рдХреЗ рдирд╛рдо ! (рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ) рдХреЗ рд╕рд╛рде рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдбрдореА classes рдкреНрд░реЛрдк рдкрд╛рд╕ рдХрд░рдирд╛ рдпрд╛ ! рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рджреЛрдиреЛрдВ рдЦрд░рд╛рдм рд╕рдордЭреМрддрд╛ рд╣реИрдВред

рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдЬреЛ рдореВрд▓ рдореБрджреНрджрд╛ рд╣реИ рд╡рд╣ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдПрдХ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд╕реБрд╡рд┐рдзрд╛ рдХреА рд╕реАрдорд╛ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдкреНрд░рдпрд╛рд╕ рдореЗрдВ рд╣реЙрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рддрд┐рдЧрдорди рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИред рдореИрдВ рдХреБрдЫ рдкреВрд░реНрд╡рд╛рдЧреНрд░рд╣реЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рд╕рдЬреНрдЬрд╛рдХрд╛рд░реЛрдВ рдХреА рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рд╣реИ, рдЬрдмрдХрд┐ рдЕрдиреНрдп рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдЯреНрд░реЗрдбрдСрдлрд╝ рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИред

@cfilipov withStyles рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХрд╛ рдореЗрд░рд╛ рдкрд╣рд▓рд╛ рд░рд┐рдлреИрдХреНрдЯрд░ рд╡рд┐рдХрд▓реНрдк (1) рдЪреБрдирдирд╛ рдерд╛, рдпрд╛рдиреА рдХреНрд▓рд╛рд╕ рдбреЗрдХреЛрд░реЗрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ withStyles рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреАрдордд рдкрд░ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЛ рдХреНрд▓рд╛рд╕ рдФрд░ рдлрдВрдХреНрд╢рди рджреЛрдиреЛрдВ рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╣реА рдмрдирд╛рдирд╛ рдерд╛ред . рдореБрдЭреЗ рддрдм рдлреАрдбрдмреИрдХ рдорд┐рд▓рд╛ рдХрд┐ рдбреЗрдХреЛрд░реЗрдЯрд░ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдПрдХ рд▓реЛрдХрдкреНрд░рд┐рдп рдЕрдиреБрд░реЛрдз рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рд╡рд┐рдХрд▓реНрдк (3) рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд┐рдпрд╛ред рдореБрдЭреЗ рдЙрд╕ рдирд┐рд░реНрдгрдп рдкрд░ рдлрд┐рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рдкреНрд░рд╕рдиреНрдирддрд╛ рд╣реЛ рд░рд╣реА рд╣реИ; рдореИрдВ рднреА рд╕рдЬреНрдЬрд╛рдХрд╛рд░реЛрдВ рдХреЛ рдЙрдирдХреА рд╡рд░реНрддрдорд╛рди рдЕрд░реНрдз-рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдк рд╕реБрд░рдХреНрд╖рд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ред

рд╣рд╛рдБ, рдореИрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд▓реЛрдХрдкреНрд░рд┐рдп рдЕрдиреБрд░реЛрдз рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рдХреЛ рд╕рдордЭрддрд╛ рд╣реВрдБред рдореИрдВ рд╕рдЬреНрдЬрд╛рдХрд╛рд░реЛрдВ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рд╣рд░ рдмрд╛рд░ (рдореБрдИ рдХреЗ рдмрд╛рд╣рд░) рдЙрдирдХреЗ рд╕рд╛рде рдХрдИ рдореБрджреНрджреЛрдВ рдореЗрдВ рднрд╛рдЧрддрд╛ рд░рд╣рддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рддрдм рддрдХ рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдЬрдм рддрдХ рдХрд┐ рд╡реЗ рддреИрдпрд╛рд░ рди рд╣реЛрдВред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдореЗрд░реА рдЪрд┐рдВрддрд╛ рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдХреБрдЫ рдирд╣реАрдВ рд╣реИ рдЗрд╕рд▓рд┐рдП рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЕрдиреНрдп рд▓реЛрдЧ рдЗрд╕ рджрд┐рд╢рд╛ рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЗрд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓ рд╕рдХреЗред

рдореИрдВрдиреЗ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмреАрдЯрд╛.13 рд╕реЗ рдмреАрдЯрд╛.13 рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд┐рдпрд╛ рдХрд┐ рдХреНрдпрд╛ рдХреБрдЫ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ рдФрд░ рд╣рд╛рдБ рдпрд╣ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореБрджреНрджрд╛ рд╣реИред рдореЗрд░реЗ 2 рд╕реЗрдВрдЯ рдпрд╣рд╛рдВ рдлреЗрдВрдХрдиреЗ рдХреЗ рд▓рд┐рдП, рдореЗрд░реЗ рд▓рд┐рдП, рд╕рдЬреНрдЬрд╛рдХрд╛рд░ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд╣реИрдВред рд╡реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдмрджрд▓реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рддрдм рддрдХ рдореИрдВ 100% рд╕рдЯреАрдХ рддрд░реАрдХреЗ рдХрд╛ рдкреВрд░рд╛ рд╕рдорд░реНрдерди рдХрд░реВрдВрдЧрд╛ред рдЪреАрдЬреЛрдВ рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рд╣реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдкрд╛рд╕ рд╕реБрд╕рдВрдЧрдд рдкреНрд░рдХрд╛рд░ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рд╣реЛрдЧреАред

8550 рдЖрдЧреЗ рдХреЗ рд╕рдмреВрдд рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ рдХрд┐ рд▓реЛрдЧ рдЗрд╕рд╕реЗ рднреНрд░рдорд┐рдд рд╣реИрдВ, рдФрд░ рд╣рдореЗрдВ @withStyles() рдХреЛ рдбреЗрдХреЛрд░реЗрдЯрд░ (рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ) рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдпрджрд┐ рд╣рдо рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЛ рд╕рд╣реА рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдПрдХ рд╡рд░реНрдЧ рдХреЛ "рд╕рдЬрд╛рдиреЗ" рдЬреИрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛:

type NonStyleProps = {
  text: string
};

const styles = {
  root: {
    backgroundColor: 'red'
  }
};

const DecoratedComponent = withStyles(styles)(
  class extends React.Component<NonStyleProps & WithStyles<'root'>> {
    render() {
      return (
        <div className={this.props.classes.root}>
          {this.props.text}
        </div>
      );
    }
  }
);

@pelotom рдореБрдЭреЗ рдЕрднреА рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рдХрд╛рд░рдг рдмреАрдЯрд╛.10 рд╕реЗ рдЖрдЧреЗ рдмрдврд╝рдирд╛ рд╣реИред рдореИрдВрдиреЗ рдкрд╣рд▓реЗ Redux рдХреА рдХрдиреЗрдХреНрдЯ рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд░реНрдЧ рдХреА рд╕реНрдЯрд╛рдЗрд▓рд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЯрд┐рдкреНрдкрдгреА рдХреА рдереАред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдЖрд╕рд╛рди рдФрд░ рдордЬрдмреВрдд рд╣реИред #8059 рдореЗрдВ рддреАрд╕рд░реА рдЯрд┐рдкреНрдкрдгреА рд╕реНрд╡рдпрдВ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рд╣реИред

@pelotom рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рд╣рдореЗрдВ рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред рдореИрдВ TS рдбреЗрдХреЛрд░реЗрдЯрд░реНрд╕ рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЙрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдореБрдЭреЗ рдмреЗрд╣рддрд░ рдкреНрд░рдХрд╛рд░ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП withStyles рд▓рд┐рдП рдЗрд╕рдХреЗ рдбреЗрдХреЛрд░реЗрдЯрд┐рдВрдЧ рд╕рдкреЛрд░реНрдЯ рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред

рд╣рдореЗрдВ рдПрдХ рдбреЗрдХреЛрд░реЗрдЯрд░ (рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ) рдХреЗ рд░реВрдк рдореЗрдВ @withStyles() рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

@pelotom рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЗрд╕ рдмрджрд▓рд╛рд╡ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рд╣реВрдВред @sebald рдЖрдк рдпрд╣рд╛рдБ рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?

рдпрд╣ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкрд░рд┐рд╡рд░реНрддрди рд╣реИ; рдпрджрд┐ рдЖрдк рдЗрд╕рдХреЗ рд╕рд╛рде рдЬрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдореИрдВрдиреЗ рдЖрдЧреЗ рдмрдврд╝рдХрд░ рдПрдХ рдкреАрдЖрд░ рдЦреЛрд▓рд╛

@pelotom typings рдЕрднреА рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдЗрд╕ рддрд░рд╣ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рд╣реЛрдЧрд╛?

interface IStyles {
    // styles interface
}
interface IHeaderInfoStyles {
    classes: any;
}
interface IHeaderInfoProps {
    // properties resulting from dispatches
}
interface IHeaderInfoInjectedProps {
   // props injected from parent if any
}
interface IHeaderInfoDispatchProps {
    // dispatches
}
interface IHeaderInfoState {
    // your state for the class
}

type HeaderInfoProps = IHeaderInfoProps & IHeaderInfoInjectedProps & IHeaderInfoDispatchProps & IHeaderInfoStyles;

class HeaderInfo extends Component<HeaderInfoProps, IHeaderInfoState> {

export const HeaderInfo_container = withStyles<IHeaderInfoInjectedProps, IStyles>(styles)(
    connect<IHeaderInfoProps, IHeaderInfoDispatchProps, (IHeaderInfoInjectedProps & IHeaderInfoStyles)>(mapStateToProps, mapDispatchToProps)(HeaderInfo),
);

@marcusjwhelan withStyles рдЕрдм 2 рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдирд╣реАрдВ рд▓реЗрддрд╛ рд╣реИ, рдФрд░ рдЖрдкрдХреЛ рд╢реИрд▓рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдХрд╛рд░ рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рдЗрд╕реЗ styles рд╕реЗ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЖрдкрдХреЛ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП

withStyles(styles)<NonStyleProps>(...);

рдпрджрд┐ рдЖрдк mapStateToProps рдФрд░ mapDispatchToProps рдореИрдВ рдЖрдкрдХреЛ рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХреИрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛ред

рдЯреАрдПрд▓; рдбреЙ; рдЪрд▓реЛ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреНрдпрд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ


@oliviertassinari @pelotom _(уГД)_/┬п рдореИрдВ рд╕рдЬреНрдЬрд╛рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛, рдЗрд╕рд▓рд┐рдП рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдмрджрд▓рд╛рд╡ рдХреА рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рддрд╛, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рд╣реВрдВред рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рдЗрд╕ "рдлреАрдЪрд░" рдХреА рдкрд░рд╡рд╛рд╣ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рдЗрд╕реЗ рдкрд╣рд▓реЗ рд╕реНрдерд╛рди рдкрд░ рдЬреЛрдбрд╝рд╛ред рдпрд╣реА IMHO рд╣реИ рдЬрд┐рд╕рдХреА рдпрд╣рд╛рдБ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╣реИред

рдореИрдВ withStyles рдХреЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рд╕реЗ рдмрд╣реБрдд рдЦреБрд╢ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЬрдм рдЖрдк рдЕрдиреНрдп рдЕрдзрд┐рдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ ramda рдпрд╛ recompose , рддреЛ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдЙрддрдиреА рд╕рдЦреНрдд рдирд╣реАрдВ рд╣реИ, рди рд╣реА рд╡реЗ рд╕реБрдкрд░ рдЯрд╛рдЗрдк-рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИрдВред рдЕрдХреНрд╕рд░ рдмрд╛рд░ рдЖрдкрдХреЛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдореЗрдВ рдЧреБрдЬрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред рд╕реБрдВрджрд░ рдирд╣реАрдВ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ 99.9% рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

рд╣рдо рдбреЗрдХреЛрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реА рдкреБрд░рд╛рдиреА рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЛ рд╡рд╛рдкрд╕ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ? рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рджреЛ рдЬреЗрдирд░рд┐рдХ рдереЗ, рд╣рдо рджреЛрдиреЛрдВ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЛ рд╕рд╛рде-рд╕рд╛рде рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рд╕рд╛рде рд╣реА, рдореИрдВ рдереЛрдбрд╝рд╛ рдЙрд▓рдЭрди рдореЗрдВ рд╣реВрдВ рдХрд┐ рд╕рдЬрд╛рд╡рдЯреА рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рд▓реЛрдЧреЛрдВ рдХреЗ рдореБрджреНрджреЗ рдХреНрдпрд╛ рд╣реИрдВ ("рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ" рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ)ред рдПрдВрдЧреБрд▓рд░ рдФрд░ https://nestjs.com/ рдЬреИрд╕реЗ рд▓рд┐рдмреНрд╕ рдЖрдЦрд┐рд░рдХрд╛рд░ рдЙрдирдХрд╛ рднрд╛рд░реА рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд▓реЛрдЧ рдХреЗрд╡рд▓ рд╕рд╣рд╛рд░рд╛ рдореЗрдВ WithStyles рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдареАрдХ рд╣реИрдВред

@рд╕реЗрдмрд╛рд▓реНрдб

рд╣рдо рдбреЗрдХреЛрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реА рдкреБрд░рд╛рдиреА рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЛ рд╡рд╛рдкрд╕ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ? рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рджреЛ рдЬреЗрдирд░рд┐рдХ рдереЗ, рд╣рдо рджреЛрдиреЛрдВ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЛ рд╕рд╛рде-рд╕рд╛рде рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рддреБрдореНрд╣рд╛рд░рд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИред рдРрд╕рд╛ рдХреЛрдИ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХрднреА рдирд╣реАрдВ рдерд╛ рдЬреЛ рд▓реЛрдЧреЛрдВ рдХреЛ рд╕рдЬреНрдЬрд╛рдХрд╛рд░ рдХрд╛ рджрд░реНрдж рд░рд╣рд┐рдд рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реЛред рдкрд╣рд▓рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди #8267 рд╕реЗ рд╣реБрдЖ, рдЬреЛ рдпрд╣ рдерд╛ рдХрд┐ рдЖрдк рдПрдХ рдбрдореА classes рдкреНрд░реЛрдк рдкрд╛рд░рд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рд╕рдЬрд╛рдП рдЧрдП рдШрдЯрдХ рдХреЗ рддрддреНрд╡ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдирд╣реАрдВ рдХрд░ рд╕рдХреЗ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП <StyledComp classes={{} as any} /> ред рджреВрд╕рд░рд╛ (рд╡рд░реНрддрдорд╛рди) рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рдкрд░реАрдд рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдЧреНрд░рд╕реНрдд рд╣реИ, рдХрд┐ рдШрдЯрдХ рд╡рд░реНрдЧ рдХреЗ рднреАрддрд░ classes рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ undefined рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдбреЗрдХреЛрд░реЗрдЯрд░реНрд╕ рдХреЛ рдЙрдирдХреЗ рд╡рд░реНрддрдорд╛рди рд╕реНрд╡рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╡реЗ рдЖрдкрдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ 2 рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ; рдЕрдкрдирд╛ рдЬрд╝рд╣рд░ рдЙрдард╛рдПрдВред

рддреАрд╕рд░рд╛ рддрд░реАрдХрд╛ рд╕рд╣реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ, рддрд╛рдХрд┐ classes рдХреЛ рдХрдХреНрд╖рд╛ рдХреЗ рднреАрддрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рд▓реЗрдХрд┐рди рдПрдХ рдкреНрд░реЛрдк рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЙрди рджреЛрдиреЛрдВ рд╢рд░реНрддреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕рдЬреНрдЬрд╛рдХрд╛рд░реЛрдВ рдХреЛ рдЫреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред

@pelotom рд╣рд╛рдБ, рдХреНрд╖рдорд╛ рдХрд░реЗрдВред рдЖрдк рд╕рд╣реА рд╣реЗред рд╕рдЪ рдореЗрдВ рдореЗрд░рд╛ рджрд┐рди рдирд╣реАрдВ рд╣реИ... рддреЛ рдЪрд▓реЛ рд╡рд┐рд▓реАрди рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ!

@рд╕реЗрдмрд╛рд▓реНрдб

рд╕рд╛рде рд╣реА, рдореИрдВ рдереЛрдбрд╝рд╛ рдЙрд▓рдЭрди рдореЗрдВ рд╣реВрдВ рдХрд┐ рд╕рдЬрд╛рд╡рдЯреА рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рд▓реЛрдЧреЛрдВ рдХреЗ рдореБрджреНрджреЗ рдХреНрдпрд╛ рд╣реИрдВ ("рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ" рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ)ред рдПрдВрдЧреБрд▓рд░ рдФрд░ https://nestjs.com/ рдЬреИрд╕реЗ рд▓рд┐рдмреНрд╕ рдЖрдЦрд┐рд░рдХрд╛рд░ рдЙрдирдХрд╛ рднрд╛рд░реА рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡реЗ рдХреЛрдгреАрдп рдореЗрдВ рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рд╕рдЬрд╛рд╡рдЯреА рдХрд╛ рджрд░реНрдж рд░рд╣рд┐рдд рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ; рдореВрд▓ рд░реВрдк рд╕реЗ рдпрджрд┐ рдбреЗрдХреЛрд░реЗрдЯрд░ рдХреЛ рдЙрд╕ рд╡рд░реНрдЧ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕реЗ рд╡рд╣ рд╕рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рддреЛ рд╡реЗ рдареАрдХ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдпрд╣рд╛рдВ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдирд╣реАрдВ рд╣реИ; withStyles рдХреЛ рдЙрд╕ рдШрдЯрдХ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдЬрд┐рд╕реЗ рд╡рд╣ рд╕рдЬрд╛рддрд╛ рд╣реИред

@pelotom рд╣рд╛рдБ, рдмрд┐рд▓реНрдХреБрд▓ред рдпрд╣ рд╕рд┐рд░реНрдл рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрди рд╣реИ рдЬреЛ рдЦрд░рд╛рдм рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ TS рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдбреЗрдХреЛрд░реЗрдЯрд░ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рд╡рд╣ рдХреЛрдгреАрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рднреА рдЕрдЪреНрдЫрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдбреЗрдХреЛрд░реЗрдЯрд░ AFAIK рдиреЗ рдврд╛рдВрдЪреЗ рдХреЗ рд╕рд╛рде рдЕрдиреБрдмрдВрдз рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рдЬреИрд╕реЗ "рдЗрд╕ рд╡рд░реНрдЧ рдХреЛ рдПрдХ рдШрдЯрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВ" рдпрд╛ "рдореЗрдЯрд╛ рдбреЗрдЯрд╛ рдЬреЛрдбрд╝реЗрдВ рддрд╛рдХрд┐ рдореИрдВ рдЗрд╕реЗ DI рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХреВрдВ "... рднрдЧрд╡рд╛рди рднреА рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдЦрдиреЗ рд╕реЗ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ

@pelotom рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдореЗрд░реЗ рдкрд╛рд╕ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ, рд╡рд╣ рдореЗрд░реЗ рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдк рд╕реБрд░рдХреНрд╖рд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЬрдм рдШрдЯрдХреЛрдВ рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ рддреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рдХреЛрдИ рдкреНрд░рдХрд╛рд░ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдореЗрд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЗрдВрдЬреЗрдХреНрд╢рдирдкреНрд░реЙрдкреНрд╕ рд╡реЗ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ рдЬреЛ рдШрдЯрдХ рджреНрд╡рд╛рд░рд╛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВред рдХрдиреЗрдХреНрдЯ рдХреЗ рдкреНрд░рдХрд╛рд░ react-redux рд╕реЗ рдкреНрд░реЙрдкреНрд╕ рдХреЗ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдХрд┐ mapStateToProps рдФрд░ DispatchProps рд╕реЗ рдЖрддреЗ рд╣реИрдВ рдЬреЛ mapDispatchToProps рд╕реЗ рдЖрддреЗ рд╣реИрдВред

рдЕрдВрдд рдореЗрдВ рдЗрдВрдЬреЗрдХреНрд╢рдирдкреНрд░реЙрдк рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдореЗрд░реЗ рдореВрд▓ рдШрдЯрдХ рдХреЛ рдкрддрд╛ рдЪрд▓реЗ рдХрд┐ рдореБрдЭреЗ рдЙрдиреНрд╣реЗрдВ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдпрд╛ рдореЗрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рдВрдХрд▓рд┐рдд рдирд╣реАрдВ рд╣реЛрдЧреАред (рдЗрд╕реА рд╕рдм рдХреА рдореЗрд░реА рдЗрдЪреНрдЫрд╛ рдереА)ред рдХреНрдпрд╛ рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдореЗрдВ рд╡рд╛рдкрд╕ рдорд╛рдЗрдЧреНрд░реЗрдЯ рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИ?

@marcusjwhelan рдлрд┐рд░ рд╕реЗ, рдпрджрд┐ рдЖрдк рдПрдХ рдкреВрд░реНрдг (рд▓реЗрдХрд┐рди рдиреНрдпреВрдирддрдо) рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдмреАрдЯрд╛ 10 рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдерд╛, рддреЛ рдореИрдВ рдЖрдкрдХреЛ рджрд┐рдЦрд╛ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХреИрд╕реЗ рдХрд░реЗрдВред AFAIK рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рд╣рд░ рддрд░рд╣ рд╕реЗ рдЕрднрд┐рд╡реНрдпрдВрдЬрдХ рдФрд░ рдкрд╣рд▓реЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

@pelotom рдореВрд░реНрдЦрддрд╛рдкреВрд░реНрдг рдкреНрд░рд╢реНрди, рдХреНрдпрд╛ рдХреЛрдИ рдРрд╕рд╛ рддрд░реАрдХрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдореБрдЭреЗ рдирдИ рд░рд┐рд▓реАрдЬрд╝ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╕реВрдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?

@wcandillon рд╣рдореЗрдВ рдЯреНрд╡рд┐рдЯрд░ рдкрд░

@pelotom рдореИрдВрдиреЗ рдКрдкрд░ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рд╣реИ ... рдЖрдкрдХреЛ рдЗрд╕рд╕реЗ рдЕрдзрд┐рдХ рджреЗрдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реЛрдЧреА? рдЖрдк рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЧреБрдг рдП, рдмреА, рд╕реА, рдбреА, рдИ рд╣реИрдВред рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдпрд╣ рд╣реИ рдХрд┐ рдЗрдВрдЬреЗрдХреНрд╢рди рд╡рд╛рд▓реЗ рдкреНрд░реЙрдкреНрд╕ рдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ

рдореИрдВ рдпрд╣ рд╕рдордЭ рдЧрдпрд╛ред

рдореИрдВ рдЗрд╕ рдЪрд░реНрдЪрд╛ рдореЗрдВ рдереЛрдбрд╝реА рджреЗрд░ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдПрдХ рд╕рдорд╛рди рддреНрд░реБрдЯрд┐ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣реА рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рдХреИрд╕реЗ рдареАрдХ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдореИрдВ [email protected] рдФрд░ [email protected] рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

const LoginForm = withStyles(styles)(
    class extends React.Component<WithStyles<'root' | 'button'>, ILoginFormState> {
    // ...
    }
);

render(
  <MuiThemeProvider theme={theme}>
    <LoginForm />
  </MuiThemeProvider>,
  document.getElementById('login-form')
);

рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рдореЗрдВ рдореБрдЭреЗ рдЬреЛ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ рд╡рд╣ рд╣реИ:

Type '{}' is not assignable to type 'IntrinsicAttributes & WithStyles<"root" | "button"> & StyledComponentP...'.
  Type '{}' is not assignable to type 'WithStyles<"root" | "button" | "progress" | "textField">'.
    Property 'classes' is missing in type '{}'.
 not assignable to type 'WithStyles<"root" | "button" | "progress" | "textField">'.
    Property 'classes' is missing in type '{}'.

рдШрдЯрдХ рд╡рд░реНрдЧ рдХреЛ рд╕рдЬрд╛рддреЗ рд╕рдордп рдЖрдкрдХреЛ рд╕реНрдЯрд╛рдЗрд▓ рдХреЗ рдмрдЬрд╛рдп рд╕реНрдЯрд╛рдЗрд▓ рдХреЙрдореНрдкреЛрдиреЗрдВрдЯрдкреНрд░реЙрдкреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП

@pelotom - рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдХрд╣реАрдВ рдХреЛрдИ рдЙрджрд╛рд╣рд░рдг рд╣реИ? рдореБрдЭреЗ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдПрдХ рд╕реНрдЯреЗрдЯрдлреБрд▓ рдХрдВрдкреЛрдиреЗрдВрдЯ рдХреНрд▓рд╛рд╕ рдХреЛ рд╕реНрдЯрд╛рдЗрд▓ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рдкрд░реЗрд╢рд╛рдиреА рд╣реЛ рд░рд╣реА рд╣реИред

@iamjem рдпрд╣ рдмрддрд╛рдирд╛ рдереЛрдбрд╝рд╛ рдХрдард┐рди рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ styles рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд╣рд▓рд╛ рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ styles рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦрд┐рдд рдЕрдзрд┐рдХ рд╡рд░реНрдЧ рдХреБрдВрдЬрд┐рдпрд╛рдБ рд╣реИрдВ рдЬреЛ рдЖрдк WithStyles<...> рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд░ рд░рд╣реЗ рд╣реИрдВ

const LoginForm = withStyles(styles)(
    class extends React.Component<WithStyles<keyof typeof styles>, ILoginFormState> {
    // ...
    }
);

рдЗрд╕реЗ рдкрд╣рд▓реЗ рдореБрджреНрджреЗ рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред рддрдм рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рджреВрд╕рд░рд╛ рдореБрджреНрджрд╛ рд╣реИ, рдЬреЛ рдпрд╣ рд╣реИ рдХрд┐ рдкрд░рд┐рдгрд╛рдореА рдкреНрд░рдХрд╛рд░ рдХрд╛ LoginForm is

React.ComponentType<WithStyles<"root" | "button"> & StyledComponentProps<"root" | "button">>

рдЬреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рд╣реА рдирд╣реАрдВ рд╣реИ; рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЧреИрд░-рд╢реИрд▓реА рд╡рд╛рд▓реЗ рдкреНрд░реЙрдкреНрд╕ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдЯрд╛рдЗрдк рд╕рд┐рд╕реНрдЯрдо рдХреЛ рднреНрд░рдорд┐рдд рдХрд░ рд░рд╣реА рд╣реИред рдЖрдк {} рдХреЛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░рдХреЗ, рдЧреИрд░-рд╢реИрд▓реА рдХреЗ рдкреНрд░реЛрдк рдХреНрдпрд╛ рд╣реИрдВ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

const LoginForm = withStyles(styles)<{}>( // <-- note the type argument
    class extends React.Component<WithStyles<keyof typeof styles>, ILoginFormState> {
    // ...
    }
);

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдпрд╣ рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рд╣реИ, рдХрд╛рд╢ рдореБрдЭреЗ рдЗрд╕ рд╕рд╛рдорд╛рди рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдкрддрд╛ рд╣реЛрддрд╛!

рдпрд╣реА рдЪрд╛рд▓ рдЪрд▓реА! рддреНрд╡рд░рд┐рдд рд╕рд╣рд╛рдпрддрд╛ @pelotom рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рд░рд┐рдПрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЕрднреА рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдордЯреЗрд░рд┐рдпрд▓-рдпреВрдЖрдИ рдореЗрдВ рдХреВрдж рдЧрдпрд╛, рдФрд░ рд╕реЛрдЪрд╛ рдХрд┐ рдЬрдм рдореИрдВ рдЗрд╕рдореЗрдВ рд╣реВрдВ рддреЛ рдореИрдВ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛ред рдХрд╣рдиреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИ, рдореБрдЭреЗ рдХреБрдЫ рдХрд┐рдирд╛рд░реЗ рдХреЗ рдорд╛рдорд▓реЗ рдорд┐рд▓ рд░рд╣реЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдпрд╣ рдмрддрд╛рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдХрд┐ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдХреИрд╕реЗ рдЦреБрд╢ рдХрд┐рдпрд╛ рдЬрд╛рдПред

рдореИрдВрдиреЗ recompose . рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рд▓ рдХрд┐рдпрд╛

рдЙрджрд╛рд╣рд░рдг

import { StyleRules, Theme, withStyles } from "material-ui/styles";
import * as React from "react";
import { compose } from "recompose";

interface IProps {
    classes?: any; // <-- add question mark
    text: string;
}

const styles = (theme: Theme): StyleRules => ({
    root: {

    },
});

@compose(
    withStyles(styles),
)
export class MyComponent extends React.Component<IProps> {
    render() {
        const { classes, text } = this.props;
        return (
            <div className={classes.root}>
                {text}
            </div>
        );
    }
}

рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ (рдФрд░ #8704) рд╕реЗ рд▓рдбрд╝ рд░рд╣рд╛ рдерд╛, рдкрд┐рдЫрд▓реЗ рдХреБрдЫ рджрд┐рдиреЛрдВ рдореЗрдВ рдХреЛрдИ рд╕реНрдкрд╖реНрдЯ рдкрд░рд┐рдгрд╛рдо рдирд╣реАрдВ рдорд┐рд▓рд╛ред рддрдм рдореИрдВрдиреЗ @pelotom рд╕реЗ рд╕рд▓рд╛рд╣ рд▓реА:

рдЖрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП StyledComponentProps рдХреЗ рдмрдЬрд╛рдп WithStyles

рдФрд░ рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд╕рдорд╛рди рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП GitHub рдкрд░ рдЦреЛрдЬрд╛ред рдФрд░ рдореБрдЭреЗ рдПрдХ рдХрд╛рдордХрд╛рдЬреА рдЙрджрд╛рд╣рд░рдг ЁЯШВ рдорд┐рд▓рд╛ред рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдФрд░ рдЗрд╕рдиреЗ рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд┐рдпрд╛ - рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдЕрд▓рдЧ рдХрдВрдЯреЗрдирд░ рдФрд░ рдШрдЯрдХ рдПрдХ рдЦреБрд╢ рдХреБрдХреА рд╣реИ: рдпрд╣рд╛рдВ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ( рдиреЛрдЯ: рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдШрдЯрдХ рдореИрдкрд┐рдВрдЧ рдПрдХ рдЕрд▓рдЧ рдХрдВрдЯреЗрдирд░ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд┐рдЪрд╛рд░ рд╣реИ рд╡реИрд╕рд╛ рд╣реАред)ред

рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдмреБрд░рд╛ рд╕рдорд╛рдзрд╛рди рд╣реИ, рддреЛ рдореИрдВ рдХрд┐рд╕реА рднреА рдмрджрд▓рд╛рд╡ рдФрд░ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реВрдВред рдЕрднреА, рдореБрдЭреЗ рдЦреБрд╢реА рд╣реИ рдХрд┐ рдореЗрд░реЗ рдХреЛрдб рдиреЗ рд╢рд┐рдХрд╛рдпрдд рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ред

type Styles = 'foo';
const styles: StyleRulesCallback<Styles> = (theme: Theme) => ({
    foo: {
        position: 'relative',
    }
});

interface Props {
  something: string;
}

class Sidebar extends React.Component<Props & WithStyles<Styles>> {
    render() {
        const { classes, something } = this.props;

        return (
                    <div className={classes.foo}>{something}</div>
        );
    }
}

export default withStyles(styles)<Props>(Sidebar);

рдореИрдВ рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рдирд╣реАрдВ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдХреБрдЫ рднреА рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ рдЬреЛ рдореИрдВрдиреЗ рдкреНрд░рд▓реЗрдЦрди, рдЙрджрд╛рд╣рд░рдг, рдФрд░ рдкрд╛рд░рд┐рдд рдореБрджреНрджреЛрдВ рдореЗрдВ рджреЗрдЦрд╛ рд╣реИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдкреБрдирд░реНрд╕рдВрдпреЛрдЬрди рдХреЗ рд╕рд╛рде рднреА, рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВ рдЗрд╕рдореЗрдВ рдХреБрдЫ рдЧреБрдг рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВ рддреЛ рдореИрдВ рдЕрдкрдиреЗ рдШрдЯрдХ рдХреЛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред
рдФрд░ рдЬреЛ рд╕рдВрд╕рд╛рдзрди рдореБрдЭреЗ рдорд┐рд▓реЗ рд╡реЗ рдЬреНрдпрд╛рджрд╛рддрд░ рдЯреАрдПрд╕, рдПрдордпреВрдЖрдИ рдпрд╛ рд░рд┐рдПрдХреНрдЯ рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рд╣реИрдВред

рдпрд╣рд╛рдБ рдореЗрд░рд╛ рдШрдЯрдХ рд╣реИ:

import React from 'react';
import AppBar from 'material-ui/AppBar';
import { withStyles, WithStyles, StyleRulesCallback } from 'material-ui/styles';

const styles: StyleRulesCallback<'positionFixed'> = () => ({
  positionFixed: {
    top: 'auto',
    bottom: 0,
  },
});

const decorate = withStyles(styles);

interface Props {
   someProp: string;
};

export const BottomNav = decorate<Props>(
  class extends React.Component<Props & WithStyles<'positionFixed'>, {}> {
    render() {
      return (
        <AppBar />
      );
    }
  }
);

export default BottomNav;

рдФрд░ рддреНрд░реБрдЯрд┐ рд╣реИ:

TS2322: Type '{}' is not assignable to type 'IntrinsicAttributes & Props & StyledComponentProps<"positionFixed"> & { children?: ReactNode; }'.
  Type '{}' is not assignable to type 'Props'.
    Property 'someProp' is missing in type '{}'.

рдореИрдВ рдЯреАрдПрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдлреА рд╢реБрд░реБрдЖрдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдкреНрд░рд▓реЗрдЦрди рдкреГрд╖реНрда рдорд┐рд▓ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЙрджрд╛рд╣рд░рдг рдХрд╛рдлреА рднреНрд░рдорд┐рдд рдФрд░/рдпрд╛ рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИред

рдЕрдЧрд░ рдЖрдк рд▓реЛрдЧреЛрдВ рдХреЗ рдкрд╛рд╕ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рд╣реИ, рддреЛ рдзрдиреНрдпрд╡рд╛рдж ;-)

@otroboe рдХреНрдпрд╛ рдЖрдк рдЙрд╕ рдХреЛрдб рдХреЛ рдЫреЛрдбрд╝ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рдзреНрд╡рдЬрд╛рдВрдХрд┐рдд рд╣реЛ рдЧрдпрд╛ рд╣реИ? рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рджрд┐рдЦрдирд╛ рдРрд╕рд╛ рд╣реИ?

<BottomNav />

рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ someProp рдкреНрд░реЛрдк рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдЬреЛ рдЖрдкрдХреА Props рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЖрд╡рд╢реНрдпрдХ рд╣реИ):

<BottomNav someProp="foo" />

рдореБрдЭ рдкрд░ рд╢рд░реНрдо рдХрд░реЛ... рдУрд╣, рдореБрдЭ рдкрд░ рд╢рд░реНрдо рдХрд░реЛред
рдореИрдВ рдЯреАрдПрд╕ рдПрдХреАрдХрд░рдг рдкрд░ рдЗрддрдирд╛ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░ рд░рд╣рд╛ рдерд╛, рдореИрдВ рдЪрд╛рд░реЛрдВ рдУрд░ рджреЗрдЦрдирд╛ рдФрд░ рдХреБрдЫ рдХрджрдо рдкреАрдЫреЗ рд╣рдЯрдирд╛ рднреВрд▓ рдЧрдпрд╛ред

рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж @pelotom : рдореБрд╕реНрдХрд╛рди:

@otroboe рд╕реНрдЯреНрд░рд┐рдВрдЧ рдбреБрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рднреА рд╣рдЯрд╛ рджреЗрдВ ...

type Styles = 'positionFixed';

рдХрд╛рд╢ рдХрд┐ рдПрдХ рдЖрд╕рд╛рди рд╣реЛрддрд╛ рд╣рд╛рд▓рд╛рдВрдХрд┐ ...

рд╣рд╛рдБ рдореИрдВрдиреЗ рд╡рд╣ рднреА рдХрд┐рдпрд╛, рдзрдиреНрдпрд╡рд╛рдж: +1:

рдореБрдЭреЗ рдмрд╕ рдЗрд╕реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдпрд╣ рддрднреА рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдореИрдВрдиреЗ рд╕реНрдЯрд╛рдЗрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЙрд╕реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдореЗрд░реА рдХрдХреНрд╖рд╛ рдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╛рд░рдВрдн рдХрд┐рдпрд╛ рд╣реЛред рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдпрджрд┐ рдореИрдВ рдХрд┐рд╕реА рдЕрдиреНрдп рдлрд╝рд╛рдЗрд▓ рд╕реЗ рд╢реИрд▓рд┐рдпрд╛рдБ рдЖрдпрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдБ, рддреЛ рдореБрдЭреЗ рдпрд╣ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рдорд┐рд▓рддреА рд╣реИред

рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реЛрддрд╛ рд╣реИ рдХреЛрдИ рд╕реБрд░рд╛рдЧ?

@ nishmeht7 рдХреНрдпрд╛ рдЖрдк рдПрдХ рд╕реНрд╡-рдирд┐рд╣рд┐рдд рд╕реНрдирд┐рдкреЗрдЯ рдкреЛрд╕реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

@pelotom рдореИрдВрдиреЗ рдЕрднреА рдПрдХ рдмрдирд╛рдиреЗ рдкрд░ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдореЗрд░реЗ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдореИрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдПрдХ рдмрдбрд╝реЗ рдРрдк рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдЕрднреА рднреА рдПрдордпреВрдЖрдИ рд╕рдВрд╕реНрдХрд░рдг 1.2.2 рдкрд░ рд╣реВрдВ, рдЬрдмрдХрд┐ рдореЗрд░рд╛ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдПрдирд╡реА рд╕рдВрд╕реНрдХрд░рдг рдирд╡реАрдирддрдо рд╣реИред рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдПрдХ рдмрд╛рд░ рдЬрдм рдореИрдВ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рдЕрдкрдЧреНрд░реЗрдб рдХрд░ рд▓реЗрддрд╛ рд╣реВрдВ рддреЛ рдореИрдВ рдЕрдкрдиреА рддреНрд░реБрдЯрд┐ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рдХрд░ рдкрд╛рдКрдВрдЧрд╛ред

рдореИрдВрдиреЗ https://material-ui.com/demos/selects/ рд╕реЗ рдПрдХ рдореВрд▓ рдлреЙрд░реНрдо рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рд╢рд┐рдХрд╛рдпрдд рдорд┐рд▓реА рдХрд┐ theme рдореЗрдВ root (рдирд╡реАрдирддрдо рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ- ui), рдФрд░ form рддрддреНрд╡ рдкрд░ рдХреЛрдИ рд╡рд░реНрдЧ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рдерд╛ред рдореИрдВрдиреЗ рдКрдкрд░ рдХреА рдЪрд░реНрдЪрд╛ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдирд┐рд░реНрдгрд╛рдпрдХ рд▓рдЧрддрд╛ рд╣реИред рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рдХрдХреНрд╖рд╛рдУрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ form рд▓рд┐рдП рдЙрддреНрдкрдиреНрди рд╡рд░реНрдЧ рдХрд╛ рдирд╛рдо рдЧрд╛рдпрдм рдерд╛ред рдЕрдЧрд░ рдореИрдВрдиреЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЬреЗрдирд░реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдХреНрд▓рд╛рд╕рдирд╛рдо рдЬреЛрдбрд╝рд╛ (рджреЗрд╡ рдЯреВрд▓реНрд╕ рдореЗрдВ console.log(theme) рд╕рд╛рде рд╕реНрдЯрд╛рдЗрд▓ рдореЗрдВ рдкрд╛рдпрд╛ рдЧрдпрд╛, рд╕рдм рдареАрдХ рд╣реИ, рддреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрдХреНрд╖рд╛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЬреЗрдирд░реЗрдЯ рдХреА рдЬрд╛ рд░рд╣реА рдереАред withStyles рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рд╣реЛ рд░рд╣рд╛ рдерд╛ рд╣рд╛рд▓рд╛рдВрдХрд┐ form рддрддреНрд╡ред рдХрд╛рдлреА рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ред

рдЗрд╕рд▓рд┐рдП рдЬрдм рддрдХ рдЗрд╕реЗ рд╣рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддрдм рддрдХ рдореИрдВ рд╡рд╛рдкрд╕ рд╢реИрд▓рд┐рдпреЛрдВ рдореЗрдВ рд╡рд╛рдкрд╕ рдЖ рдЧрдпрд╛ рд╣реВрдВ:

<form style = {{display:'flex',flexWrap:'wrap'}} autoComplete="off">

@HenrikBechmann рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рд╕реНрдЯрд╛рдЗрд▓ рдбреЙрдХреНрдпреВрдореЗрдВрдЯреЗрд╢рди рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ? рдЕрддреАрдд рдореЗрдВ, рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдлреА рдорджрджрдЧрд╛рд░ рд░рд╣рд╛ рд╣реИред https://material-ui.com/guides/typescript/

рдзрдиреНрдпрд╡рд╛рдж @ рд▓реБрдХрдлрд░реНрд╕реНрдЯ! рдореИрдВрдиреЗ рджреЗрдЦрд╛ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдкрд╣рд▓реЗ рдирд╣реАрдВ :-)) рдЙрд╕ рдбреЙрдХреНрдЯрд░ рдкрд░, рдФрд░ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛

export default withStyles({
  root: {
    display: 'flex',
    flexWrap: 'wrap',
  },
})(BaseForm)

(рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрдЬрд╛рдп рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд╛рд╕ рдХрд░рдирд╛)

... рдЬреЛ рджреЛрдиреЛрдВ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рдмрдЪрддреЗ рд╣реИрдВ, рдФрд░ рдЙрддреНрдкрдиреНрди рд╡рд░реНрдЧ рдХреЗ рдЗрдВрдЬреЗрдХреНрд╢рди рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рддреЗ рд╣реИрдВред

рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╡рд╣рд╛рдВ рдЕрдиреНрдп рдпреБрдХреНрддрд┐рдпрд╛рдВ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдирд┐рд░реНрдорд╛рдгреЛрдВ рдореЗрдВ рдорджрдж рдХрд░реЗрдВрдЧреАред

рдореИрдВрдиреЗ рдпрд╣ рднреА рдкреБрд╖реНрдЯрд┐ рдХреА рд╣реИ рдХрд┐ styles рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╕рдВрд░рдЪрдирд╛ рдХрд╛рдо рдХрд░рддреА рд╣реИ (рдПрдХ рдЙрддреНрдкрдиреНрди className рдХреЛ form рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рддрд╛ рд╣реИ):

import React from 'react'

import { withStyles, createStyles, Theme } from '@material-ui/core/styles'

/*
    patterned after first demo https://material-ui.com/demos/selects/ for 3.03
    use Typsecript fixes from here: https://material-ui.com/guides/typescript/
*/

const styles = (theme:Theme) => createStyles({
  root: {
    display: 'flex',
    flexWrap: 'wrap',
  },
})

class BaseForm extends React.Component<any,any> {

    render() {
        const { classes } = this.props

        return (
            <form className = {classes.root} autoComplete="off">
                {this.props.children}
            </form>
        )
    }
}

export default withStyles(styles)(BaseForm)

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: @ eps1lon рдиреЗ рдмрддрд╛рдпрд╛ рд╣реИ рдХрд┐ рдпрд╣ WithStyles рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рд╛рде рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╣реИ!

рдореЗрд░реЗ рд▓рд┐рдП ClassKey рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ ReturnType<T> рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреБрдЫ рд╕рдлрд▓рддрд╛ рдорд┐рд▓реА рд╣реИ:

import * as React from 'react';

import withStyles, {
  StyledComponentProps, 
  StyleRulesCallback,
} from '@material-ui/core/styles/withStyles';

import { Theme } from '@material-ui/core/styles/createMuiTheme';

const overrideStyles = (theme: Theme) => ({
  root: {
    display: 'flex',
    flexDirection: 'column',
  },
});

type Props = StyledComponentProps<keyof ReturnType<typeof overrideStyles>>;

class MyComponent extends React.PureComponent<Props> {
  render() {
    return <div className={this.props.classes.root}></div>;
  }
}

export default withStyles(overrideStyles as StyleRulesCallback, {withTheme: true})(MyComponent);

keyof ReturnType<typeof styleOverrides> рдХрд╛ рдЙрдкрдпреЛрдЧ StyledComponentProps ClassKey рдореЗрдВ рдХрд░рдиреЗ рд╕реЗ рдЖрдкрдХреЛ overrideStyles рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдИ рдЧрдИ рд╡рд╕реНрддреБ рд╕реЗ рдЪрд╛рдмрд┐рдпрд╛рдВ рдорд┐рд▓ рдЬрд╛рдПрдВрдЧреА рдФрд░ рдЖрдкрдХреЛ рдЙрди рдЪрд╛рдмрд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд░рдЦрдиреЗ рд╕реЗ рдмрдЪрд╛рдПрдЧреА . рдЕрдЧрд░ рдореИрдВрдиреЗ withStyles рдХреЙрд▓ рдореЗрдВ overrideStyles as StyleRulesCallback рдирд╣реАрдВ рдбрд╛рд▓рд╛ рддреЛ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдЧрдбрд╝рдмрдбрд╝реА рдореИрдВрдиреЗ рджреЗрдЦреА рд╣реИ рд╡рд╣ рд╣реИ рдЯрд╛рдЗрдк рдПрд░рд░ред рдореБрдЭреЗ 100% рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпреЛрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ withStyles рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ overrideStyles рд╣реИред

рдЙрд╕ рд╡рд┐рд╕реНрддреГрдд рдкреНрд░рдХрд╛рд░ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, typeof styleOverrides рдЙрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╕реНрдЯрд╛рдЗрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рджреЗрддрд╛ рд╣реИред ReturnType<T> рдЖрдкрдХреЛ рд╕реНрдЯрд╛рдЗрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реА рдорд┐рд▓реЗрдЧрд╛ред keyof рдЖрдкрдХреЛ рд╕реНрдЯрд╛рдЗрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рдХреБрдВрдЬреА рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛ред

@chrislambe рдЖрдкрдХреЛ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЧрд╛рдЗрдб рдЪреЗрдХрдЖрдЙрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрдкрдХреЛ ReturnType рдЖрджрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред createStyles рдФрд░ WithStyles рд╕рд╣рд╛рдпрдХреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

@ eps1lon рдУрд╣ рдЕрд░реЗ, рдмрд╣реБрдд

fwiw рдореИрдВ createStyles/withStyles рдЬреЛрдбрд╝реА рдХреЛ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдкрд╕рдВрдж рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рд╕рд╛рдл рдХреЛрдб рдХреЛ рдмрдврд╝рд╛рд╡рд╛ рджреЗрддрд╛ рд╣реИ, рдореЗрд░реЗ рд╕рднреА рд╕реНрдЯрд╛рдЗрд▓/рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореБрджреНрджреЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рдФрд░ рдпрджрд┐ рдореБрдЭреЗ рд╕реНрдерд╛рдиреАрдп рд╕рд╢рд░реНрдд рд╕реАрдПрд╕рдПрд╕ рдЪрд╛рд╣рд┐рдП рддреЛ рдореИрдВ рдХреЗрд╡рд▓ рд╕реНрдерд╛рдиреАрдп рд╢реИрд▓реА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдмрдирд╛ рджреЗрддрд╛ рд╣реВрдВ, рдЬреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрдХреНрд╖рд╛рдУрдВ рдкрд░ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд▓реЗрддреЗ рд╣реИрдВред

рдЕрдЪреНрдЫрд╛!!

@material-ui/ [email protected] рдХреЗ рд╕рд╛рде рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЧрд╛рдЗрдб рдХреЗ рдмрд╛рдж рдореБрдЭреЗ Test does not have required attribute classes рд╣реИ:

import React from 'react'
import { Theme, WithStyles, withStyles, createStyles } from '@material-ui/core/styles'

const styles = (theme: Theme) => createStyles({
  root: {
    color: theme.palette.action.active
  },
})

interface Props extends WithStyles<typeof styles> {
  asd: boolean
}

class TestComponent extends React.Component<Props> {

  render() {
    const { classes } = this.props

    return (
      <div className={classes.root}>
      </div>
    )
  }
}

const Test = withStyles(styles)(TestComponent)

const a = () => <Test asd={true}/>

@ рд╣рд╛рд░реВрдирд▓рд┐рдлреНрдЯрди2
рдХреГрдкрдпрд╛ WithStyles . рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рдкреНрд░реЙрдкреНрд╕ рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХрд╛ рдкрд╛рд▓рди тАЛтАЛрдХрд░реЗрдВ

@valoricDe рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЕрдкрдиреА рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рдХрд░ рд▓реА рд╣реИ?

@TrejGun рдореИрдВрдиреЗ рдЕрднреА рдЪреЗрдХ рдХрд┐рдпрд╛ рд╣реИред рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдШрдЯрдХ рдХреЗ рд╕рд╛рде рдФрд░ @material-ui/ core @

рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ рд╕рдордЭрддрд╛ред
рдпрд╣рд╛рдБ рдбреЙрдХреНрд╕ рдХреЗ рдмрд╛рдж: https://material-ui.com/guides/typescript/#augmenting -your-props-using-withstyles
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдореВрд▓ рдореБрджреНрджреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИред рдЬрдм рдЖрдк рдХрд╣реАрдВ рднреА рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЖрдкрдХреЛ _pass_ рдХреНрд▓рд╛рд╕ рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЛ рдкреНрд░реЛрдк рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдордЭрдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЗрд╕реЗ рд╕реНрдЯрд╛рдЗрд▓ рдХреЗ рд╕рд╛рде _injected_ рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

рдореИрдВ рдЗрди рдореБрджреНрджреЛрдВ рдХреЛ рдХреБрдЫ рдШрдВрдЯреЛрдВ рд╕реЗ рдкрдврд╝ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдХреЛрдИ рдорджрдж рдмрд╣реБрдд рдЕрдЪреНрдЫреА рд╣реЛрдЧреАред

рдЙрдкрд░реЛрдХреНрдд рдЗрд╕ рд╕реБрдЭрд╛рд╡ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ

@cfilipov рдПрдХ рдШрдЯрдХ рд╡рд░реНрдЧ рдХреЛ StyledComponentProps рдмрдЬрд╛рдп WithStyles рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдпрджрд┐ рд╕рдЦреНрдд рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдВрдЪ рдореЛрдб рдореЗрдВ рдЖрдкрдХреЛ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЧреИрд░-рд╢реВрдиреНрдп рджрд╛рд╡рд╛ рдСрдкрд░реЗрдЯрд░ ! рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ classes ред рдХреНрд▓рд╛рд╕ рдбреЗрдХреЛрд░реЗрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ withStyles рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рд╕рдордЭреМрддрд╛ рд╣реИред рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдХреНрд▓рд╛рд╕ рдбреЗрдХреЛрд░реЗрдЯрд░ рдЗрд╕ рд╕реАрдорд╛ рд╕реЗ рдЧреНрд░рд╕реНрдд

  1. рдХреНрд▓рд╛рд╕ рдбреЗрдХреЛрд░реЗрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ withStyles рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рди рдХрд░реЗрдВ
  2. рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдЖрдк рд╕рдЬрд╛рдП рдЧрдП рдШрдЯрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рддрддреНрд╡ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╕рдордп рдПрдХ рдбрдореА classes рдкреНрд░реЛрдк рдкрд╛рд╕ рдХрд░реЗрдВ (рдкрд┐рдЫрд▓рд╛ рд╕рдордЭреМрддрд╛, рдЬреЛ рдпрдХреАрдирди рдЕрдзрд┐рдХ рдХрд╖реНрдЯрдкреНрд░рдж рдерд╛ )
  3. рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ classes рдХреЛ рдШрдЯрдХ рдХреЗ рдЕрдВрджрд░ рдЕрд╢рдХреНрдд рдорд╛рдирд╛ рдЬрд╛рдП, рдЬрд┐рд╕рд╕реЗ рдЖрдкрдХреЛ ! рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЬрд╛рдП рдЬрдм рдЖрдк рдЗрд╕рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ ( рд╡рд░реНрддрдорд╛рди рд╕рдордЭреМрддрд╛ ) рддрдХ

рдореИрдВ рдЕрддреНрдпрдзрд┐рдХ рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдпрджрд┐ рдЖрдкрдХреЗ рдШрдЯрдХ рдореЗрдВ рдХреЛрдИ рд░рд╛рдЬреНрдп рдирд╣реАрдВ рд╣реИ рддреЛ рдЖрдк рдПрдХ рд╕реНрдЯреЗрдЯрд▓реЗрд╕ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдХрдо рдкреНрд░рдХрд╛рд░ рдХреЗ рдПрдиреЛрдЯреЗрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдФрд░ рдЕрдзрд┐рдХ рдкреНрд░рдХрд╛рд░ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реЛрдЧрд╛:

export default withStyles(styles)<Props>(({ classes, message }) => (
  <div className={classes.main}>
    <div className={classes.foo}>
      Hello World! {message}
    </div>
  </div>
));

рдореБрдЭреЗ рдХреИрд╕реЗ рдкрддрд╛ рдЪрд▓реЗрдЧрд╛ рдХрд┐ StyledComponentProps рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ? рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рд╕рд┐рд░реНрдл рд╕реНрдЯрд╛рдЗрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЪрд╛рдмрд┐рдпреЛрдВ рдХреЗ рддрд╛рд░ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВред

рд▓реЗрдХрд┐рди рдбреЙрдХреНрд╕ рд╣рдореЗрдВ рдХреБрдЫ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддреЗ рд╣реИрдВ рдЬреЛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛? рдореБрдЭреЗ рдХрд┐рд╕рдХреА рдпрд╛рдж рдЖ рд░рд╣реА рд╣реИ? рдореИрдВ https://material-ui.com/guides/typescript/#augmenting -your-props-using-withstyles рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛...

рдХреНрдпрд╛ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ?

@valoricDe , рдЖрдкрдиреЗ рдЙрд╕ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдШрдЯрдХ рдХреЛ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд┐рд╕рдореЗрдВ рд╡рд╣ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рдереА

@TrejGun рдореИрдВрдиреЗ рдЕрднреА рдЪреЗрдХ рдХрд┐рдпрд╛ рд╣реИред рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдШрдЯрдХ рдХреЗ рд╕рд╛рде рдФрд░ @material-ui/ core @

рдореИрдВ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ:

```рдЖрдпрд╛рдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛, {рдмрджрд▓рд╛рд╡, рдШрдЯрдХ, рдкреНрд░реЗрд╖рдг} "рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛" рд╕реЗ;
"рдкреНрд░реЛрдк-рдкреНрд░рдХрд╛рд░" рд╕реЗ рдкреНрд░реЛрдкрдЯрд╛рдЗрдк рдЖрдпрд╛рдд рдХрд░реЗрдВ;
"рд░рд┐рдПрдХреНрдЯ-рд░реЗрдбрдХреНрд╕" рд╕реЗ рдЖрдпрд╛рдд {рдХрдиреЗрдХреНрдЯ};
"@material-ui/core" рд╕реЗ {рдЧреНрд░рд┐рдб, рдлреЙрд░реНрдордХрдВрдЯреНрд░реЛрд▓ рд▓реЗрдмрд▓, рдереАрдо, createStyles, withStyles, Radio, WithStyles} рдЖрдпрд╛рдд рдХрд░реЗрдВ;
"./ рд░рд╛рд╢рд┐" рд╕реЗ рдЖрдпрд╛рдд рд░рд╛рд╢рд┐;
рдЖрдпрд╛рдд { onPastDueFormFieldChange } "../../store/actions/selectPaymentAmountActions" рд╕реЗ;

рдХрд╛рд╕реНрдЯ рд╕реНрдЯрд╛рдЗрд▓ = (рдереАрдо: рдереАрдо) =>
рдХреНрд░рд┐рдПрдЯ рд╕реНрдЯрд╛рдЗрд▓реНрд╕({
рд░рдХрдо: {
рд╕рдВрд░реЗрдЦрд┐рдд рдХрд░реЗрдВ: "рдХреЗрдВрджреНрд░",
},
});

рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдУрдирдкреНрд░реЙрдкреНрд╕ рд╡рд┐рде рд╕реНрдЯрд╛рдЗрд▓реНрд╕ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИ{}

рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реНрдЯреЗрдЯрдкреНрд░реЙрдкреНрд╕ {
рдкрд┐рдЫрд▓реЗ рдбреНрдпреВ ?: рд╕рдВрдЦреНрдпрд╛;
pastDueOrTotalOrOther: рд╕реНрдЯреНрд░рд┐рдВрдЧ;
}

рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдбрд┐рд╕реНрдкреИрдЪрдкреНрд░реЙрдкреНрд╕ {
onPastDueFormFieldChange: OnPastDueFormFieldChange;
}

рдЯрд╛рдЗрдк рдкреНрд░реЙрдкреНрд╕ = рд╕реНрдЯреЗрдЯрдкреНрд░реЙрдкреНрд╕ рдФрд░ рдбрд┐рд╕реНрдкреИрдЪрдкреНрд░реЙрдкреНрд╕ рдФрд░ рдУрдирдкреНрд░реЙрдкреНрд╕;

рдХреЙрдиреНрд╕реНрдЯ рдкрд╛рд╕реНрдЯрдбреНрдпреВрдлреЙрд░реНрдордлрд┐рд▓реНрдб = рд╕реНрдЯрд╛рдЗрд▓реНрд╕ (рд╢реИрд▓рд┐рдпреЛрдВ) рдХреЗ рд╕рд╛рде (
({classes, pastDue, pastDueOrTotalOrOther, onPastDueFormFieldChange}: рдкреНрд░реЙрдкреНрд╕) => (
рдореВрд▓реНрдп = "рдкрд╛рд╕реНрдЯрдбреНрдпреВ"
рдЪреЗрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ = {pastDueOrTotalOrOther === "рдкрд╛рд╕реНрдЯрдбреНрдпреВ"}
onChange={onPastDueFormFieldChange}
рд▓реЗрдмрд▓ = "рдкрд┐рдЫрд▓реЗ рджреЗрдп:"
рдирд┐рдпрдВрддреНрд░рдг = { }
/>




),
);

const mapStateToProps = (рд░рд╛рдЬреНрдп: рд░реВрдЯрд╕реНрдЯреЗрдЯ): StateProps => ({
рдкрд╛рд╕реНрдЯрдбреНрдпреВ: рд╕реНрдЯреЗрдЯ.рдХрд╕реНрдЯрдорд░рдбреЗрдЯрд╛.рдмреИрд▓реЗрдВрд╕рдбреНрдпреВ.рдкрд╛рд╕реНрдЯрдбреНрдпреВ,
pastDueOrTotalOrOther: State.customerPaymentsForm.pastDueTotalOrOther,
});

рдирд┐рд░реНрдпрд╛рдд рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрдиреЗрдХреНрдЯ(
рдореИрдкрд╕реНрдЯреЗрдЯрдЯреЙрдкрдкреНрд░реЙрдкреНрд╕,
{onPastDueFormFieldChange},
)(PastDueFormField);

When I use this component I have this error:
```import PastDueFormField
Property 'classes' is missing in type '{}' but required in type 'Readonly<PropsWithChildren<Pick<Pick<Props, "pastDue" | "pastDueOrTotalOrOther" | "onPastDueFormFieldChange"> & StyledComponentProps<"amount">, "classes" | "innerRef"> & OwnProps>>'

@yehudamakarov рдкрд╣рд▓реЗ react-redux рдХреЗ рдмрд┐рдирд╛ рдХреЛрдб рдЖрдЬрд╝рдорд╛рдПрдВ рдФрд░ рдЬрдм рд╕рдм рдХреБрдЫ рдЕрдкреЗрдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░реЗ рддреЛ connect рдЬреЛрдбрд╝реЗрдВред рдЬрдм рдкреНрд░реЛрдк рдЗрдВрдЬреЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЕрд╡рд▓реЛрдХрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рдХрдард┐рди рд╣реЛрддрд╛ рд╣реИред

рдЗрди рдореБрджреНрджреЛрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддреЗ рд╕рдордп рдореИрдВ

  1. рдкрд╣рд▓реЗ рдореЗрд░рд╛ рдХрдВрдкреЛрдиреЗрдВрдЯ рдкреНрд░реЙрдкреНрд╕ рдЯрд╛рдЗрдк рдХрд░реЗрдВ
  2. рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рд╕рдм рдХреБрдЫ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИ рдпрд╛рдиреА missing props
  3. рд╣реЙрдХ рд▓рд╛рдЧреВ рдХрд░реЗрдВ
  4. рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдиреЗ рдкреНрд░рддреНрдпреЗрдХ рдЗрдВрдЬреЗрдХреНрд╢рди рд╡рд╛рд▓реЗ рдкреНрд░реЛрдк рдХреЛ рдкрд╣рдЪрд╛рдирд╛ рд╣реИ
  5. рд╕рднреА рд╣реЙрдХреНрд╕ рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рддрдХ 3 рджреЛрд╣рд░рд╛рдПрдВред

рдпрд╣ рдХреНрд▓реАрдирд░ рдХреЛрдб рдХреЛ рдмрдврд╝рд╛рд╡рд╛ рджреЗрддрд╛ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдЖрджреЗрд╢ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВред рдЖрдк рд╡рд░реНрддрдорд╛рди рдореЗрдВ withStyles рдФрд░ connect рдмрд┐рдирд╛ рдЪрд┐рдВрддрд╛рдУрдВ рдХреЛ рдЕрд▓рдЧ рдХрд┐рдП рдорд┐рд▓рд╛рддреЗ рд╣реИрдВред

рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж рд╕реЗрдмрд╕реНрдЯрд┐рдпрдиред
рдореИрдВрдиреЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рддрд░реНрдХ рдкрд╛рд░рд┐рдд рди рдХрд░рдХреЗ рдЕрдкрдиреА рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рдХреАред рдореИрдВрдиреЗ <StateProps ...> рдЦрдВрдб рдирд┐рдХрд╛рд▓рд╛ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рд╕рд╛рдорд╛рдиреНрдп рддрд░реНрдХ рдореЗрд░реЗ рдУрдирдкреНрд░реЙрдкреНрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рд╛рде рдЦрд┐рд▓рд╡рд╛рдбрд╝ рдХрд░ рд░рд╣реЗ рдереЗ рдЬреЛ рдХрд┐ рд╕реНрдЯрд╛рдЗрд▓реНрд╕ <> рдХреЛ рдмрдврд╝рд╛рддрд╛ рд╣реИред

рдЪреВрдВрдХрд┐ рдореИрдВ рдШрдЯрдХ рдХреЛ рд╕рдм рдХреБрдЫ рдкрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд╡реИрд╕реЗ рднреА рдореЗрд░реЗ рдкреНрд░реЙрдкреНрд╕ рд╕реЗ рдореБрдЭреЗ рдЬреЛ рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдВрдЪ рдорд┐рд▓рддреА рд╣реИ рд╡рд╣ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдИрдбреА рдХреЛ рдХрдиреЗрдХреНрдЯ <> рдЬреЗрдирд░рд┐рдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИред

рдзрдиреНрдпрд╡рд╛рдж!

рдпрджрд┐ рд╣рдо рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЛ рд╕рд╣реА рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдПрдХ рд╡рд░реНрдЧ рдХреЛ "рд╕рдЬрд╛рдиреЗ" рдЬреИрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛:

type NonStyleProps = {
  text: string
};

const styles = {
  root: {
    backgroundColor: 'red'
  }
};

const DecoratedComponent = withStyles(styles)(
  class extends React.Component<NonStyleProps & WithStyles<'root'>> {
    render() {
      return (
        <div className={this.props.classes.root}>
          {this.props.text}
        </div>
      );
    }
  }
);

рдФрд░ рдереАрдо рдХреИрд╕реЗ рдЬреЛрдбрд╝реЗрдВ (useTheme ()) рдЕрдВрджрд░ рдХреА рддрд░рд╣:

const decorate = withStyles((theme: Theme) => ({
  root: {
    display: "flex"
  },
  appBar: {
    zIndex: theme.zIndex.drawer + 1,
    transition: theme.transitions.create(["width", "margin"], {
      easing: theme.transitions.easing.sharp,
      duration: theme.transitions.duration.leavingScreen
    })
  }
})
рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

chris-hinds picture chris-hinds  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

anthony-dandrea picture anthony-dandrea  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

sys13 picture sys13  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ghost picture ghost  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

activatedgeek picture activatedgeek  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ