Typescript: μ„Έ 번째λ₯Ό ν˜•μ„±ν•˜κΈ°μœ„ν•œ 두 개의 일반 맀개 λ³€μˆ˜μ˜ κ΅μ°¨λŠ” λ™λ“±ν•œ κ²ƒμœΌλ‘œ μΈμ‹λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

에 λ§Œλ“  2019λ…„ 01μ›” 13일  Β·  3μ½”λ©˜νŠΈ  Β·  좜처: microsoft/TypeScript


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 μ‹œλ„ν–ˆλŠ”λ° 같은 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€.

ν”Œλ ˆμ΄ κ·ΈλΌμš΄λ“œ 링크 :

링크

κ΄€λ ¨ 문제:

https://github.com/Microsoft/TypeScript/issues/5823

Question

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

μ—¬κΈ°μ„œ 였λ₯˜κ°€ μ •ν™•ν•˜λ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. 예 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)}
}

λͺ¨λ“  3 λŒ“κΈ€

μ—¬κΈ°μ„œ 였λ₯˜κ°€ μ •ν™•ν•˜λ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. 예 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 }))
이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰

κ΄€λ ¨ 문제

dlaberge picture dlaberge  Β·  3μ½”λ©˜νŠΈ

fwanicka picture fwanicka  Β·  3μ½”λ©˜νŠΈ

Antony-Jones picture Antony-Jones  Β·  3μ½”λ©˜νŠΈ

blendsdk picture blendsdk  Β·  3μ½”λ©˜νŠΈ

weswigham picture weswigham  Β·  3μ½”λ©˜νŠΈ