openlang

TSX label의 TS2339 오류: React가 for 속성을 거부해요

typescript와 react, TSX 파일, definitely typed 선언을 쓰는데 컴파일에서 이런 오류가 나와요:

  error TS2339: Property 'for' does not exist on type 'HTMLProps<HTMLLabelElement>'.

아래 TSX가 있는 컴포넌트를 컴파일할 때 발생해요

  <label for={this.props.fieldId} className="field-caption">{this.props.caption}</label>

이미 고쳤지만 Google이나 StackOverflow에서 검색해도 답이 나오지 않았어서 다음에 같은 문제를 겪을 분을 위해 남겨 둡니다

영어에서 번역원문 보기

이어지는 대화 2

서로의 근거를 따라
  1. 고유 링크

    속성을 for에서 htmlFor로 바꾸니 해결됐어요

      <label htmlFor={this.props.fieldId} className="field-caption">{this.props.caption}</label>

    React 자체에서 for를 특별하게 다루는 듯해요. class를 처리할 때 className을 요구하는 것과 비슷하니, definitely typed 선언 때문에 생기는 문제는 아닙니다.

    영어에서 번역원문 보기
  2. 고유 링크

    그 답은 대체로 맞지만, "htmlFor"와 "className"은 React만의 기능이 아니라 JavaScript에도 있다는 점을 덧붙이고 싶습니다. 예를 들어 일반 JavaScript로 비슷한 label을 만들면 이런 식으로 쓸 수 있습니다:

      const captionNode = document.createElement('label');
      captionNode.htmlFor = "field";
      captionNode.innerText = "caption";
      captionNode.className = "field-caption";

    JSX (TSX)에서 "className"과 "htmlFor"를 쓰는 것도 아마 바로 그 이유일 겁니다(JSX는 사실 Javascript 속성들을 직접 대입하는 작업을 간단하게 쓰는 문법이니까요).

    영어에서 번역원문 보기

같은 질문의 다른 갈래

  1. Java Mail에서 이메일 주소 대신 발신자 이름을 표시하기

    Java Mail API로 메시지를 보내고 있어요. 도착한 메일의 받은편지함에는 보낸 주소가 표시돼요. 그 발신자 주소 대신 텍스트를 보여 주고 싶어요. facebook에서 오는 메일은 받은편지함에 "mailbox@faceb…

    답글 2최근 활동 java
  2. TypeScript에서 Dynamics CRM에 접근하기

    CRM 코드가 웹 리소스 안에서 실행되다 보니 엔터티 데이터를 가져오려면 이렇게 작성해야 해요. 그런데 typescript로 작성하면 이 표현식이 컴파일되지 않아요. 지금은 Xrm.Page 앞에 window.parent를..…

    답글 2최근 활동 typescript
  3. Gleam HTTP 응답 헤더에는 어떤 날짜 형식이 필요한가요?

    Date 헤더를 보내고 싶어요. 필요한 형식은 다음과 같아요: 지금까지 시도한 코드는 이거예요:

    답글 3최근 활동 gleam