찾다

 >  Q&A  >  본문

이 제목의 재작성된 버전은 다음과 같습니다: 이것은 TypeScript의 버그입니까? (보간된 에스리터럴은 문자열 유형으로 인식되지 않습니다.)

TS는 보간된 prop 값의 종류를 다음과 같이 생각하는 것 같습니다.

으아아아

문자열이 아닌가요(구별 가능한 공용체에 사용되는 경우)?

아래의 세 번째 p3 实例会丢失 ev 필드에 추론을 입력하세요. 단, href가 보간된 비문 문자열인 경우에만 해당됩니다.

으아아아

TS 샌드박스 완전 재현

P粉015402013P粉015402013267일 전550

모든 응답(1)나는 대답할 것이다

  • P粉617597173

    P粉6175971732024-03-31 00:33:04

    업데이트 TS5.2+

    이 버그는 microsoft/TypeScript#53907에서 수정되었으므로 TypeScript 5.2부터 문제의 코드는 아무런 변경 없이 예상대로 작동합니다.

    TS 5.2.0-dev.20230516

    의 플레이그라운드 링크를 사용하세요.

    TS5.1에 대한 원래 답변-

    알고 보니예, 이것은 제가 Stack Overflow 질문에 대한 응답으로 제출한 microsoft/TypeScript#53888과 같은 TypeScript의 버그입니다. 컴파일러는 차별 속성 href가 유형 string이고 정의되지 않음이 아니라는 것을 인식하는 것 같지만 이는 너무 늦게 발생합니다. 컨텍스트에 따라 hrefstring 类型,而不是 undefined,但这发生得太晚了 根据上下文输入 onClick onClick 콜백 매개변수를 입력합니다. 아마도 템플릿 텍스트 보간은 문제를 일으키는 것을 지연시키는 데 충분할 것입니다.

    GitHub 문제는 백로그에 있습니다. 이는 TS 팀이 이 문제를 곧 고칠 계획이 없다는 뜻입니다... 따라서 도움이 필요합니다로 표시되어 커뮤니티 구성원의 끌어오기 요청을 수락한다는 뜻입니다. 따라서 이 문제를 가능한 한 빨리 해결하려는 사람은 누구나 직접 수정 사항을 제공하는 것을 고려해야 합니다.

    그 동안 제가 제안하는 해결 방법은 문자열 보간을 미리 수행하고 해당 유형을 미리 알 수 있도록 const에 저장하는 것입니다.

    으아아아

    성가신 일이지만(JSX의 경우 훨씬 더 성가신 일이겠지만) 적어도 작동합니다!

    0
  • 취소회신하다