2016-09-30 3 views
3

내 프로젝트에 React 유형 정의를 사용하고 있습니다. array returned by the refs property에있는 요소에 포커스 메서드가 없습니다. 따라서 this example을 사용할 수 없습니다. 기본적으로 컴파일러는 다음과 같이 말합니다 : property 'focus' does not exist on type 'Component <any, any> | Element'. 이는 포커스HTMLElement이 아닌 요소에 있기 때문입니다. 정의 파일은 의 반환 유형을으로 지정해야합니다. | HTMLElement 또는 포커스 메소드가 포함 된 다른 확장 인터페이스 (확실하지는 않지만 그 점은 제 질문의 요점입니다).사용중인 TypeScript 정의 파일에 단일 정의가 누락되면 어떻게합니까?

내 질문은 : 지금해야 할 일은 무엇입니까? 나는 계속 개발에 매달렸다!

정의 파일을 포크하고 직접 패치 할 수 있다는 것을 알고 있습니다. 그러나이 문제는 TypeScript에서 계속 발생하는 것으로 보이며, 덜 번거로운 솔루션이 있으면 빠르게 이동할 수 있는지 궁금합니다. TypeScript 패치를 자주 수행하기 위해 앱을 빌드하는 과정에서 벗어나야합니다.

답변

1

신속하고 더러운 솔루션은 ....

메모를 any 캐스팅 DefinitelyTyped에 끌어 오기 요청이 좋은 이동 될 제출 즉

onSubmitEditing={(event) => { 
    (this.refs.SecondInput as any).focus(); 
}} 

유형 검사의을 선택하는 것입니다 : 필요하다면 "double casting to any"을 사용하여 더 정교해질 수 있습니다.

type ProperRef = Component <any, any> | HTMLElement 

onSubmitEditing={(event) => { 
    const secondRef = this.refs.SecondInput as any as ProperRef; 
    secondRef.focus(); 
}} 
+0

이중 주조의 장점은 무엇입니까? – cubabit

+0

@ 큐빗. 그 특별한 경우에는 없습니다. 보다 일반적으로,'any'로 형변환하면,이 변수에 대한 타입 검사를 거부합니다. 이중 캐스팅을 사용하면 다시 거부하고 해당 변수에 대해 다시 입력하는 이점이 있습니다. –

관련 문제