Event.target이 Typescript의 요소가 아닌 이유는 무엇입니까?
내 KeyboardEvent로이 작업을 수행하고 싶습니다.
var tag = evt.target.tagName.toLowerCase();
Event.target은 EventTarget 유형이지만 Element에서 상속하지 않습니다. 그래서 다음과 같이 캐스팅해야합니다.
var tag = (<Element>evt.target).tagName.toLowerCase();
이것은 아마도 표준을 따르지 않는 일부 브라우저 때문일 것입니다. TypeScript에서 올바른 브라우저 불가지론 적 구현은 무엇입니까?
추신 : 저는 jQuery를 사용하여 KeyboardEvent를 캡처하고 있습니다.
Element
모든 이벤트 대상이 요소가 아니기 때문에 상속되지 않습니다 .
MDN에서 :
요소, 문서 및 창은 가장 일반적인 이벤트 대상이지만 다른 개체도 이벤트 대상이 될 수 있습니다 (예 : XMLHttpRequest, AudioNode, AudioContext 등).
KeyboardEvent
사용하려는 것 조차도 DOM 요소 또는 창 객체 (그리고 이론적으로는 다른 것들)에서 발생할 수 있으므로 바로 거기 evt.target
에서 Element
.
DOM 요소에 대한 이벤트 인 경우 안전하게 가정 할 수 있습니다 evt.target
. 입니다 Element
. 나는 이것이 브라우저 간 동작의 문제라고 생각하지 않습니다. 단순히 그 EventTarget
보다 더 추상적 인 인터페이스입니다 Element
.
추가 정보 : https://typescript.codeplex.com/discussions/432211
typescript를 사용하여 내 기능에만 적용되는 사용자 정의 인터페이스를 사용합니다. 사용 사례의 예.
handleChange(event: { target: HTMLInputElement; }) {
this.setState({ value: event.target.value });
}
이 경우 handleChange는 HTMLInputElement 유형의 대상 필드가있는 오브젝트를 수신합니다.
나중에 내 코드에서 사용할 수 있습니다.
<input type='text' value={this.state.value} onChange={this.handleChange} />
더 깔끔한 접근 방식은 인터페이스를 별도의 파일에 배치하는 것입니다.
interface HandleNameChangeInterface {
target: HTMLInputElement;
}
나중에 다음 함수 정의를 사용하십시오.
handleChange(event: HandleNameChangeInterface) {
this.setState({ value: event.target.value });
}
내 사용 사례에서 handleChange의 유일한 호출자는 입력 텍스트의 HTML 요소 유형이라는 것이 명시 적으로 정의되어 있습니다.
JLRishe의 대답이 정확하므로 이벤트 처리기에서 간단히 사용합니다.
if (event.target instanceof Element) { /*...*/ }
타이프 스크립트 3.2.4
속성을 검색하려면 대상을 적절한 데이터 유형으로 캐스팅해야합니다.
e => console.log((e.target as Element).id)
e.currentTarget
대신 사용 e.target
하면 이미 적절하게 입력됩니다.
참고 URL : https://stackoverflow.com/questions/28900077/why-is-event-target-not-element-in-typescript
'Development Tip' 카테고리의 다른 글
데이터베이스에서 너무 많은 행이 몇 개 있습니까? (0) | 2020.10.06 |
---|---|
Django의 ./manage.py syncdb를 실행할 때 자동으로 관리자 사용자 생성 (0) | 2020.10.06 |
Javascript "Uncaught TypeError : object is not a function"연관성 질문 (0) | 2020.10.05 |
범위 기반 for 루프를 사용할 때 반복기가 필요합니다. (0) | 2020.10.05 |
팬더의 for 루프가 정말 나쁜가요? (0) | 2020.10.05 |