Open beecomci opened 2 years ago
const onChange = (event: React.FormEvent<HTMLInputElement>) => { const { target: { value } } = event; setValue(value); }; return ( <div> <form onSubmit={onSubmit}> <input type="text" value={value} onChange={onChange} placeholder="username" /> <button>Log in</button> </form> </div> );
Property 'value' does not exist on type 'EventTarget'.
target
currentTarget
event.target
EventTarget
Element
const onChange = (event: React.FormEvent<HTMLInputElement>) => { const target = event.target as HTMLInputElement; setValue(target.value); };
HTMLElement
이슈
Property 'value' does not exist on type 'EventTarget'.
target
: 실제 이벤트가 발생하는 요소currentTarget
: 이벤트가 걸린 요소원인
event.target
은 기본적으로 Typscript의EventTarget
타입을 갖고 있는데,EventTarget
타입이Element
타입을 상속받지 않기 때문에 Typescript 입장에서는Element
의 id, class 등의 속성을 알아차리지 못함그럼 왜 EventTarget 타입은 Element 타입을 상속받지 않나 ?
EventTarget
이 HTML elements라는 보장이 없기 때문EventTarget
은 XMLHttpRequest, FileReader, AudioNode, AudioContext 등이 될 수 있음해결 방안
1. Typescript에게 EventTarget의 정확한 타입 설명
HTMLElement
만 지정해줘도 된다지만, 난 정확한 타입을 지정해줘야 오류가 사라졌음2. currentTarget