TypeScript λ²μ : 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
λ₯Ό μ μνκΈ° λλ¬Έμ μ΄κ²μ΄ μ ν¨ ν κ²μ΄λΌκ³ μμν©λλ€.
μ€μ νλ :
return λ¬Έμμ 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
λ R
ν λΉ ν μ _not_λ©λλ€. 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
λR
ν λΉ ν μ _not_λ©λλ€.z
λ§€κ° λ³μ.κ·νμ μμμ
R
λ§€κ° λ³μλ μ€μ λ‘ νμνμ§ μμ΅λλ€ (μ€μ μ¬μ© μ¬λ‘κ° λ λ³΅μ‘ ν μ μμ). μ΄κ²μ μλν©λλ€ :