@types/xxxx
рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдореБрдЭреЗ рд╕рдорд╕реНрдпрд╛рдПрдВ рдереАрдВредDefinitions by:
рдореЗрдВ index.d.ts
) рддрд╛рдХрд┐ рд╡реЗ рдХрд░ рд╕рдХреЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛.рдирдорд╕реНрдХрд╛рд░! рдореИрдВрдиреЗ рдЕрднреА-рдЕрднреА 5.0.16
рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдЕрдкрдиреЗ рдореМрдЬреВрджрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЗрди рдирдП рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рддреБрд░рдВрдд рдХреБрдЫ рдкрд░реЗрд╢рд╛рдиреА рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдпрд╣рд╛рдБ рдХреБрдЫ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрдЦреНрдпрд╛рдПрдБ рд╣реИрдВ:
@types/react-redux: ^5.0.16,
typescript: ^2.8.x,
react-redux: ^5.0.5,
рдпрд╣рд╛рдВ рдХреБрдЫ рдХреЛрдб рд╣реИ рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рдФрд░ рдЬреЛ 5.0.16
рд╕реЗ рдкрд╣рд▓реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдпрджрд┐ рд╣рдо рд╕рдВрд╕реНрдХрд░рдг рдХреЛ 5.0.15
рд╡рд╛рдкрд╕ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдлрд┐рд░ рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рд╣реЛрддрд╛ рд╣реИ):
// components/exampleComponent.ts
import React = require('react')
import { IState, IDateRange, ReportType } from '../../types/index'
export interface IExampleProps {
label?: string
dateRange: IDateRange
onDateRangeChange: (value: IDateRange) => void
}
export class ExampleComponent extends React.Component<IExampleProps> {
// implementation
}
// containers/exampleComponent.ts
import { connect } from 'react-redux'
import { IState, IDateRange, ReportType } from '../../types/index'
interface IPropsFromState {
dateRange: IDateRange
}
interface IPropsFromParent {
reportType: ReportType
}
const mapStateToProps = (state: IState, props: IPropsFromParent): IPropsFromState => {
const config = state.reporting.reportConfigs[props.reportType]
return {
dateRange: config ? config.dateRange : null,
}
}
const connector = connect<IPropsFromState, null, IPropsFromParent>(
mapStateToProps,
)
export const ExampleContainer = connector(ExampleComponent) // <-- this does not compile
рдЖрдо рддреМрд░ рдкрд░ рдореИрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрдВрдЯреЗрдирд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд░рд╣реВрдВрдЧрд╛,
<ExampleContainer reportType={ReportType.USERS_CREATED} />
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдХреЗ рд╕рд╛рде рдирд╡реАрдирддрдо @types/react-redux
рдкрд░ 5.0.16
рдФрд░ рдХрдо рд╕реЗ рдЯрд╛рдЗрдкрдкреНрд░рддрд┐ 2.8.1
рдореИрдВ рдмрдЬрд╛рдп рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ:
[ts]
Argument of type 'typeof ExampleComponent' is not assignable to parameter of type 'ComponentType<IPropsFromState & DispatchProp<any> & IPropsFromParent>'.
Type 'typeof ExampleComponent' is not assignable to type 'StatelessComponent<IPropsFromState & DispatchProp<any> & IPropsFromParent>'.
Type 'typeof ExampleComponent' provides no match for the signature '(props: IPropsFromState & DispatchProp<any> & IPropsFromParent & { children?: ReactNode; }, context?: any): ReactElement<any>'.
5.0.16
рдореЗрдВ рдкреЗрд╢ рдХрд┐рдП рдЧрдП рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЯрд╛рдЗрдк рд╕рд┐рд╕реНрдЯрдо рдкрд░реЗрд╢рд╛рди рд╣реИ рдХреНрдпреЛрдВрдХрд┐ connector
рдореЗрдВ InferableComponentEnhancerWithProps<IPropsFromState & IPropsFromParent, IPropsFromParent>
рдЯрд╛рдЗрдк рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рддрд░реНрдХ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░ рд░рд╣рд╛ рд╣реИ IPropsFromState & IPropsFromParent
ред рдореЗрд░реЗ рдореВрд▓ рдШрдЯрдХ рдореЗрдВ reportType
рд╕рдВрдкрддреНрддрд┐ рдЧреБрдо рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдореИрдВ рдЗрд╕реЗ рд▓рд┐рдЦрддрд╛ рд╣реВрдВ:
const f = <P extends IPropsFromParent & IPropsFromState>(component: Component<P>) => { /**/ }
const g = <P extends IPropsFromParent & IPropsFromState>(props: P) => { /**/ }
const record: IExampleProps = null
f(ExampleComponent)
g(record)
рдпреЗ рдиреНрдпреВрдирддрдо рдЙрджрд╛рд╣рд░рдг рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред рдкрд╣рд▓реЗ рдПрдХ рд╣реА рдЕрдкрд╛рд░рджрд░реНрд╢реА рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдХреЗ рд╕рдорд╛рди рдХрд╛рд░рдг рдХреЗ рд▓рд┐рдП рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИред рджреВрд╕рд░рд╛ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐, рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ, IExampleProps
рдкрд╛рд╕ reportType: ReportType
рд╕рдВрдкрддреНрддрд┐ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо IExampleProps
рд╕реЗ P
рдЕрд╕рд╛рдЗрди рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдореЗрдВ reportType
рдЧреБрдо рд╣реИред рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╣реБрдб рдХреЗ рдиреАрдЪреЗ рд╣реИ, рдЬреЛ рдкрд╣рд▓рд╛ рдЙрджрд╛рд╣рд░рдг рд╡рд┐рдлрд▓ рд╣реЛрдиреЗ рдХрд╛ рдХрд╛рд░рдг рдмрди рд░рд╣рд╛ рд╣реИред
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ 5.0.16
рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЛ рдЙрдирдХреЗ рд▓рд┐рдкрдЯреЗ рдШрдЯрдХреЛрдВ рдХреЗ рдЗрдВрдЯрд░рдлреЗрд╕ рдореЗрдВ рдирдП рдЧреБрдг рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ? рдХреЛрдб рдХреЛ рджреЗрдЦрдХрд░ рдореИрдВ рдпрд╣реА рджреЗрдЦрддрд╛ рд╣реВрдВред
рдпрд╣ рдШрдЯрдХреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рд╕рд╛рдорд╛рдиреНрдп рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ, рдХреЗрд╡рд▓ рдЙрди рдЧреБрдгреЛрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЬреЛ рдЙрдиреНрд╣реЗрдВ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдлрд┐рд░ рдЙрди рдШрдЯрдХреЛрдВ рдХреЛ рдПрдЪрдУрд╕реА рдХреЗ рд╕рд╛рде рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рдПрдХ рдирдпрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдШрдЯрдХ рдХреЛ рд░реЗрдбрдХреНрд╕ рд╕реНрдЯреЛрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕рдХреЗ рдЧреБрдг рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдирдпрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд┐рдкрдЯреЗ рд╣реБрдП рдШрдЯрдХ рдХреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рд╕рдмрд╕реЗрдЯ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдиреНрдп рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЙрдкрд░реЛрдХреНрдд рдорд╛рдорд▓реЗ рдореЗрдВ, рдирдП рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдВрдкрддреНрддрд┐ reportType
рдЬрд┐рд╕реЗ рдХреЙрд▓рд░ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ рд▓реЗрдХрд┐рди рд▓рдкреЗрдЯрд╛ рд╣реБрдЖ рдШрдЯрдХ рдХрднреА рдирд╣реАрдВ рджреЗрдЦ рдкрд╛рдПрдЧрд╛ред
рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рддрдХрдиреАрдХ рдХрд╛ рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬрд┐рд╕рдХрд╛ рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рдЗрд╕ рдкрд░рд┐рд╡рд░реНрддрди рд╕реЗ рдЯреВрдЯрд╛ рд╣реБрдЖ рд╣реИ:
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ рд╕рд░рд▓ рдШрдЯрдХ рд╣реИрдВ,
class NameDateComponent extends React.PureComponent<{ name: string, date: string}> {}
class DateOnlyComponent extends React.PureComponent<{ date: string }> {}
рдореИрдВ рдПрдХ рдПрдЪрдУрд╕реА рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рдЗрди рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП date
рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдмрд┐рдирд╛ name
рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ред рдЗрд╕ рддрд░рд╣ рдореИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ NameProvider рдФрд░ рдПрдХ DateProvider рдмрдирд╛ рд╕рдХрддрд╛ рд╣реВрдВ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЗрд╕ рддрд░рд╣ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реВрдВ: NameProvider(DateProvider(BaseComponent))
рдпрд╛ рдЗрд╕ рддрд░рд╣ DateProvider(NameProvider(BaseComponent))
, рдХреБрдЫ рдРрд╕рд╛ рдЬреЛ рдореИрдВ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдПрдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рдШрдЯрдХ рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ TOwnProps
рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдХрд╛рд░рдг рдмрдврд╝рд╛рдиреЗ рд╡рд╛рд▓рд╛ред
interface IWithDate {
date: string
}
// ComponenProps defines a component interface that includes IWithDate
// NewAPI defines a new interface that excludes IWithDate
// so the types represent only what will change in the given component, without needing to know the rest of the interface
function DateProvider <ComponentProps extends IWithDate, NewAPI extends Minus<ComponentProps, IWithDate>> (Base: CompositeComponent<ComponentProps>) {
const enhancer = connect<ComponentProps, null, NewAPI>(
(_state: IState, props: NewAPI): ComponentProps => {
// because of the 'never' type,
// typescript doesn't think NewAPI & IWithProps == ComponentProps
// so we have to coerce this (but you and I can see that the above holds)
const newProps: any = Object.assign({
date: '2017-01-01'
}, props)
return newProps as ComponentProps
},
null
)
return enhancer(Base) // <-- after 5.0.16 this line does not compile
}
рдпрд╣ рдирдпрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЕрдЬреНрдЮреЗрдпрд╡рд╛рджреА рдШрдЯрдХ рдмрдврд╝рд╛рдиреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
const NameOnly = DateProvider(NameDateComponent)
const Nothing = DateProvider(DateOnlyComponent)
.
.
.
<Nothing />
<NameOnly name='Bob' />
<NameDateComponent name='Bob' date='2017-01-01' />
рддреЛ DateProvider
рдПрдЪрдУрд╕реА рдЙрд╕ рдШрдЯрдХ рдХреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ рдкреВрд░реА рддрд░рд╣ рдЕрд╡рдЧрдд рд╣реБрдП рдмрд┐рдирд╛ рдПрдХ рдШрдЯрдХ рдХреЛ рдмрдврд╝рд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИред рдЗрд╕реЗ рдХреЗрд╡рд▓ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рджрд┐рдпрд╛ рдЧрдпрд╛ рдШрдЯрдХ рдЙрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░реЙрдкреНрд╕ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ред
5.0.16
рдпрд╣ рдЕрдм рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдореБрдЭреЗ рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдорд┐рд▓рддрд╛ рд╣реИ:
[ts]
Argument of type 'CompositeComponent<ComponentProps>' is not assignable to parameter of type 'ComponentType<ComponentProps & NewAPI>'.
Type 'ComponentClass<ComponentProps>' is not assignable to type 'ComponentType<ComponentProps & NewAPI>'.
Type 'ComponentClass<ComponentProps>' is not assignable to type 'StatelessComponent<ComponentProps & NewAPI>'.
Types of property 'propTypes' are incompatible.
Type 'ValidationMap<ComponentProps>' is not assignable to type 'ValidationMap<ComponentProps & NewAPI>'.
Type 'keyof ComponentProps | keyof NewAPI' is not assignable to type 'keyof ComponentProps'.
Type 'keyof NewAPI' is not assignable to type 'keyof ComponentProps'.
Type 'keyof NewAPI' is not assignable to type '"date"'.
рдЪрд╛рд░реЛрдВ рдУрд░ рдЦреЗрд▓рддреЗ рд╣реБрдП, рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рд╣реИ:
interface IWithDate {
date: string
}
interface IComponentProps {
name: string
date: string
}
// I've torn out the internals of the DateProvider above
const connect1 = <T extends IWithDate, U extends Omit<T, keyof IWithDate>>(base: CompositeComponent<T>) => {
const enhancer: InferableComponentEnhancerWithProps<T & U, U> = () => null
return enhancer(base) // <-- this is a compile error
}
const connect2 = <T extends IWithDate, U extends Omit<T, keyof IWithDate>>() => {
const enhancer: InferableComponentEnhancerWithProps<T & U, U> = () => null
return enhancer
}
const enhancer = connect2<IComponentProps, Omit<IComponentProps, keyof IWithDate>>()
const container = enhancer(NameDateComponent) // <-- this is not a compile error
рдЬрдм рд╣рдо рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрдиреЗрдХреНрдЯрд░ рдЯрд╛рдЗрдк рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?
рдЗрддрдирд╛ рд╣реА! рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж;) рдЕрднреА рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдЕрдкрдиреЗ @types/react-redux
рдХреЛ рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╕реЗрдЯ рдХрд░ рджрд┐рдпрд╛ рд╣реИ рдФрд░ рд╕рдм рдареАрдХ рд╣реИред
@variousauthors рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ @types/react
рдФрд░ @types/react-redux
рдЙрди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ ?
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: @
рдиреЗ рдЪреАрдЬреЛрдВ рдХреЛ рдЧрдбрд╝рдмрдбрд╝ рдХрд░ рджрд┐рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ libs рдХреЗ рдирд╛рдо рдкреНрд░рдХрдЯ рдирд╣реАрдВ рд╣реБрдП, рдХреНрд╖рдорд╛ рдХрд░реЗрдВ: рдирд┐рд░рд╛рд╢:
@ рд╡рд┐рднрд┐рдиреНрди рд▓реЗрдЦрдХ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд╕рд╛рде рд╣рд╛рдЬрд┐рд░ рд╣реИрдВ
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ 5.0.16 рдХреЗ рдмрд╛рдж рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЛ рдЙрдирдХреЗ рд▓рд┐рдкрдЯреЗ рдШрдЯрдХреЛрдВ рдХреЗ рдЗрдВрдЯрд░рдлреЗрд╕ рдореЗрдВ рдирдП рдЧреБрдг рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ? рдХреЛрдб рдХреЛ рджреЗрдЦрдХрд░ рдореИрдВ рдпрд╣реА рджреЗрдЦрддрд╛ рд╣реВрдВред
рдмрдЧ рдпрд╣ рд╣реИ рдХрд┐ рд░реЗрдбрдХреНрд╕ рдХреЗ connect
рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдкреНрд░рдХрд╛рд░ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛рдПрдВ ownProps
рдФрд░ mapPropsToState
рдкреНрд░рддрд┐рдЪреНрдЫреЗрдж рдХрд░рддреА рд╣реИрдВ ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рднреА "рдХрдВрдЯреЗрдирд░" рдШрдЯрдХ рдХреЛ рдХрд┐рд╕реА рднреА рд╡реНрдпреБрддреНрдкрдиреНрди "рдкреНрд░реЗрдЬреЗрдВрдЯреЗрд╢рдирд▓" рдШрдЯрдХреЛрдВ рдореЗрдВ рдЕрдкрдиреЗ рдкреНрд░реЙрдкреНрд╕ рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ- рдЬреЛ рд╕рд╛рдорд╛рдиреНрдп рд░реЗрдбрдХреНрд╕ рдбрд┐рдЬрд╝рд╛рдЗрди рдкреИрдЯрд░реНрди рдХреЛ рддреЛрдбрд╝рддрд╛ рд╣реИред
рдкреАрдЖрд░ рдЬреЛ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛: https://github.com/DefinitelyTyped/DefinitelyTyped/pull/24764
рдЕрдиреНрдп рд╕рдорд╕реНрдпрд╛: https://github.com/DefinitelyTyped/DefinitelyTyped/issues/24922
5.0.15 рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдиреЗ рд╕реЗ рд╕рдорд╕реНрдпрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рд▓ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдЬрдмрдХрд┐ 5.0.15 рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреЛрдб рдХреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЪреЗрддрд╛рд╡рдиреА рдХреЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдЧрд╛- рдпрджрд┐ рдЖрдк connect
рдХреЙрд▓ рдореЗрдВ рдкреНрд░реЗрдЬреЗрдВрдЯреЗрд╢рдирд▓ рдХрдВрдкреЛрдиреЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдкреНрд░реЙрдкреНрд╕ рдХреА рдЯрд╛рдЗрдк-рдЪреЗрдХрд┐рдВрдЧ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдЕрднреА рднреА рддреНрд░реБрдЯрд┐рдкреВрд░реНрдг рд╣реИред (рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рд░реИрдкрд┐рдВрдЧ рдШрдЯрдХ рдореЗрдВ рдПрдХ рдкреНрд░реЛрдк рд╣реИ рдЬреЛ MyComponent
рдирд╣реАрдВ рд╣реИ)
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрд╣ 5.0.15 рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди 5.0.16 рдореЗрдВ рдирд╣реАрдВ
connect(stateToProps, dispatchToProps)(MyComponent)
рд╣рд╛рд▓рд╛рдБрдХрд┐- 5.0.15 рдореЗрдВ рднреА, рдЖрдк рдХрдВрдкрд╛рдЗрд▓рд░ рддреНрд░реБрдЯрд┐ рдХреЗ рдмрд┐рдирд╛ MyComponent
рдкреНрд░реЙрдкреНрд╕ рдЯрд╛рдЗрдк рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
connect<statetoprops, dispatchtoprops, mycomponentprops)(stateToProps, dispatchToProps)(MyComponent)
рдпрд╣ рд╢рд┐рдХрд╛рдпрдд рдХрд░рдиреЗ рдореЗрдВ рддреНрд░реБрдЯрд┐ рд╣реЛрдЧреА рдХрд┐ рд░реИрдкрд┐рдВрдЧ рдШрдЯрдХ рдкреНрд░реЛрдк MyComponent
рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдмрдбрд╝рд╛ рдореБрджреНрджрд╛ рд╣реИ рдЬреЛ рдЯрд╛рдЗрдк рдореИрдкрд┐рдВрдЧ рдореЗрдВ рдЫрд┐рдкрд╛ рд╣реБрдЖ рд╣реИ рдХрд┐
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
5.0.15 рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдиреЗ рд╕реЗ рд╕рдорд╕реНрдпрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рд▓ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдЬрдмрдХрд┐ 5.0.15 рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреЛрдб рдХреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЪреЗрддрд╛рд╡рдиреА рдХреЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдЧрд╛- рдпрджрд┐ рдЖрдк
connect
рдХреЙрд▓ рдореЗрдВ рдкреНрд░реЗрдЬреЗрдВрдЯреЗрд╢рдирд▓ рдХрдВрдкреЛрдиреЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдкреНрд░реЙрдкреНрд╕ рдХреА рдЯрд╛рдЗрдк-рдЪреЗрдХрд┐рдВрдЧ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдЕрднреА рднреА рддреНрд░реБрдЯрд┐рдкреВрд░реНрдг рд╣реИред (рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рд░реИрдкрд┐рдВрдЧ рдШрдЯрдХ рдореЗрдВ рдПрдХ рдкреНрд░реЛрдк рд╣реИ рдЬреЛMyComponent
рдирд╣реАрдВ рд╣реИ)рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрд╣ 5.0.15 рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди 5.0.16 рдореЗрдВ рдирд╣реАрдВ
connect(stateToProps, dispatchToProps)(MyComponent)
рд╣рд╛рд▓рд╛рдБрдХрд┐- 5.0.15 рдореЗрдВ рднреА, рдЖрдк рдХрдВрдкрд╛рдЗрд▓рд░ рддреНрд░реБрдЯрд┐ рдХреЗ рдмрд┐рдирд╛
MyComponent
рдкреНрд░реЙрдкреНрд╕ рдЯрд╛рдЗрдк рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВconnect<statetoprops, dispatchtoprops, mycomponentprops)(stateToProps, dispatchToProps)(MyComponent)
рдпрд╣ рд╢рд┐рдХрд╛рдпрдд рдХрд░рдиреЗ рдореЗрдВ рддреНрд░реБрдЯрд┐ рд╣реЛрдЧреА рдХрд┐ рд░реИрдкрд┐рдВрдЧ рдШрдЯрдХ рдкреНрд░реЛрдк
MyComponent
рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИрдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдмрдбрд╝рд╛ рдореБрджреНрджрд╛ рд╣реИ рдЬреЛ рдЯрд╛рдЗрдк рдореИрдкрд┐рдВрдЧ рдореЗрдВ рдЫрд┐рдкрд╛ рд╣реБрдЖ рд╣реИ рдХрд┐