Definitelytyped: рдХреБрдЫ рдореМрдЬреВрджрд╛ рдХрдиреЗрдХреНрдЯ рдХреЙрд▓ 5.0.16 . рд╕реЗ рдЯреВрдЯ рдЧрдИ рд╣реИрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 11 рдЕрдкреНрд░реИрд▓ 2018  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: DefinitelyTyped/DefinitelyTyped

  • [x] рдореИрдВрдиреЗ @types/xxxx рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдореБрдЭреЗ рд╕рдорд╕реНрдпрд╛рдПрдВ рдереАрдВред
  • [x] рдореИрдВрдиреЗ tsc рдХреЗ рдирд╡реАрдирддрдо рд╕реНрдерд┐рд░ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ред https://www.npmjs.com/package/typescript
  • [x] рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдкреНрд░рд╢реНрди рд╣реИ рдЬреЛ StackOverflow рдХреЗ рд▓рд┐рдП рдЕрдиреБрдкрдпреБрдХреНрдд рд╣реИред (рдХреГрдкрдпрд╛ рд╡рд╣рд╛рдВ рдХреЛрдИ рдЙрдкрдпреБрдХреНрдд рдкреНрд░рд╢реНрди рдкреВрдЫреЗрдВ)ред
  • [x] [рдЙрд▓реНрд▓реЗрдЦ] (https://github.com/blog/821-mention-somebody-the-re-notified) рд▓реЗрдЦрдХ ( Definitions by: рдореЗрдВ index.d.ts ) рддрд╛рдХрд┐ рд╡реЗ рдХрд░ рд╕рдХреЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛.

    • рд▓реЗрдЦрдХ: @Pajn @tkqubo @thasner @kenzierocks @clayne11 @tansongyang @NicholasBoll @mDibyo @pdeva

рдореБрджреНрджреЗ)

рдирдорд╕реНрдХрд╛рд░! рдореИрдВрдиреЗ рдЕрднреА-рдЕрднреА 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 рдХреЛ рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╕реЗрдЯ рдХрд░ рджрд┐рдпрд╛ рд╣реИ рдФрд░ рд╕рдм рдареАрдХ рд╣реИред

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

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 рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдмрдбрд╝рд╛ рдореБрджреНрджрд╛ рд╣реИ рдЬреЛ рдЯрд╛рдЗрдк рдореИрдкрд┐рдВрдЧ рдореЗрдВ рдЫрд┐рдкрд╛ рд╣реБрдЖ рд╣реИ рдХрд┐

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

@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 рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдмрдбрд╝рд╛ рдореБрджреНрджрд╛ рд╣реИ рдЬреЛ рдЯрд╛рдЗрдк рдореИрдкрд┐рдВрдЧ рдореЗрдВ рдЫрд┐рдкрд╛ рд╣реБрдЖ рд╣реИ рдХрд┐

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

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

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

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

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

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

[рдбреА3] рдореЙрдбреНрдпреВрд▓ 'рдбреА3-рд╕реНрдХреЗрд▓' рдкрд╣рд▓реЗ рд╣реА 'рдЗрдВрдЯрд░рдкреЛрд▓реЗрдЯрдХреВрд▓' рдирд╛рдо рдХреЗ рдПрдХ рд╕рджрд╕реНрдп рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд░ рдЪреБрдХрд╛ рд╣реИред рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкреБрдирдГ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред
matt-senseye picture matt-senseye  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ