рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдВрд╕реНрдХрд░рдг: 3.3.0-dev.201xxxxx
рдЦреЛрдЬ рд╢рдмреНрдж:
рдЬреЗрдиреЗрд░рд┐рдХ рдХрд╛ рдЕрдВрддрд░
рдХреЛрдб
let connect = <R1,R2, R = R1&R2 >(mapState2Props: (state) => R1, mapDispatch2Props: (dispatch: any) => R2): R => {
let state = {};
let dispatch = () => { };
return { ...mapState2Props(state), ...mapDispatch2Props(dispatch)}
}
рдЕрдкреЗрдХреНрд╖рд┐рддреН рд╡реНрдпрд╡рд╣рд╛рд░:
рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдорд╛рдиреНрдп рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рд╕рд╛рдорд╛рдиреНрдп рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдореЗрдВ R = R1&R2
рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рд╣реИред
рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡реНрдпрд╡рд╣рд╛рд░:
рд░рд┐рдЯрд░реНрди рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдкрд░ Type 'R1 & R2' is not assignable to type 'R'.
рдПрдХ рддреНрд░реБрдЯрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред рдореИрдВрдиреЗ R extends R1&R2
рднреА рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рд╡рд╣реА рддреНрд░реБрдЯрд┐ рдорд┐рд▓реА рд╣реИред
рдЦреЗрд▓ рдХрд╛ рдореИрджрд╛рди рд▓рд┐рдВрдХ:
рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ:
рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рддреНрд░реБрдЯрд┐ рдпрд╣реАрдВ рд╣реИред рд╣рд╛рдВ R1 & R2
R
рдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЗ рд▓рд┐рдП рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди R
рдХреЛ _more_ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рддрддреНрдХрд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддрд╛рддреНрдХрд╛рд▓рд┐рдХрддрд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред
connect<{ x: number; }, { y: number; }, { x: number, y: number, z: number }>( ... );
рдпрд╣ R1
, R2
, рдФрд░ R
рдХрд╛ рдПрдХ рдорд╛рдиреНрдп рддрд╛рддреНрдХрд╛рд▓рд┐рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди R1 & R2
_not_ R
рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЧрд╛рдпрдм рд╣реИ z
рдкреИрд░рд╛рдореАрдЯрд░ред
рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ R
рдкреИрд░рд╛рдореАрдЯрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЖрдкрдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓рд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)ред рдпрд╣ рдХрд╛рдо:
let connect = <R1,R2>(mapState2Props: (state) => R1, mapDispatch2Props: (dispatch: any) => R2): R1 & R2 => {
let state = {};
let dispatch = () => { };
return { ...mapState2Props(state), ...mapDispatch2Props(dispatch)}
}
рд╣рдореНрдо рд╣рд╛рдВ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫреА рдмрд╛рдд рд╣реИред рдпрд╣рд╛рдБ рд▓рдХреНрд╖реНрдп рдпрд╣ рдерд╛ рдХрд┐ рдЕрдВрддрддрдГ рдЖрдкрдХреЛ рд╡рд╣ рд╕реНрдерд╛рди рдорд┐рд▓реЗ рдЬрд╣рд╛рдБ рдЖрдк рдХреЗрд╡рд▓ R
рд░рд┐рдЯрд░реНрди рдЯрд╛рдЗрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рдХрд╛рд░ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ mapState2Props
& mapDispatch2Props
рдПрдХ рд╡реИрдз R
рдкрд░рд┐рдгрд╛рдо рд╣реЛрдЧрд╛ред
рдИрдЬреА:
interface IComponentProps{
foo: string;
doFoo: ()=>void
}
let props: IComponentProps = connect<IComponentProps>(
(state) => { foo: state.foo },
(dispatch) => {doFoo: () => dispatch('FOO')}
)
рд╣рд╛рд▓рд╛рдВрдХрд┐ ... рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдпрд╣ рднреА рд╕рдВрднрд╡ рд╣реИ ... рддреЛ рдЬреИрд╕реЗ рдЖрдк рдХреЛ R1 & R2 рдХреЛ R
рдХреБрдЫ рд╕рдмрд╕реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рд╡реЗ рдПрдХ-рджреВрд╕рд░реЗ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИрдВ ...
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ R
рднреА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рдХрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЬреЗрдирд░рд┐рдХ рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреНрд░рдХрд╛рд░ рдХреЗ рддрд░реНрдХ рдЕрдбрд╝рдЪрди рдирд╣реАрдВ рд╣реИрдВред
connect<{ a: string }, { b: number }, { c: boolean[] }>(() => ({ a: "a" }), () => ({ b: 3 }))
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рддреНрд░реБрдЯрд┐ рдпрд╣реАрдВ рд╣реИред рд╣рд╛рдВ
R1 & R2
R
рдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЗ рд▓рд┐рдП рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рдиR
рдХреЛ _more_ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рддрддреНрдХрд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддрд╛рддреНрдХрд╛рд▓рд┐рдХрддрд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВредрдпрд╣
R1
,R2
, рдФрд░R
рдХрд╛ рдПрдХ рдорд╛рдиреНрдп рддрд╛рддреНрдХрд╛рд▓рд┐рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рдиR1 & R2
_not_R
рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЧрд╛рдпрдм рд╣реИz
рдкреИрд░рд╛рдореАрдЯрд░редрдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ
R
рдкреИрд░рд╛рдореАрдЯрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЖрдкрдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓рд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)ред рдпрд╣ рдХрд╛рдо: