JavaScript에는 기본 유형의 "속성"이 존재하는지 확인할 수 있는 객체 래퍼가 있는데, TypeScript도 이와 같이 작동하도록 하려면 어떻게 해야 합니까?
P粉797855790
P粉797855790 2023-07-28 18:48:38
0
1
467
<p>XMLValidator.validate의 반환 값은 true이거나 ValidationError(완전히 정확하지는 않습니다. 내 업데이트 참조)이며 ValidationError에는 err 속성이 있습니다. </p> <pre class="brush:php;toolbar:false;">validate(xmlData: string, options?: ValidationOptionsOptional): true | ValidationError</pre> <p>JavaScript는 부울 기본 값을 표현하기 위해 객체 래퍼를 사용하기 때문에 err 속성이 존재하는지 확인하여 유효성 검사가 성공했는지 알 수 있습니다. </p> <pre class="brush:php;toolbar:false;">const result = XMLValidator.validate(message) if (result.err) { // TS에서 어떻게 작동하게 할까요? console.log(`잘못된 XML) } 또 다른 { console.log(`XML) }</pre> <p>그러나 TypeScript에서는 이 작업을 허용하지 않으며 오류를 보고합니다. 'err' 속성이 "true" 유형에 존재하지 않습니다. </p><p>나는 반환 유형을 먼저 확인하는 아이디어가 마음에 들지 않습니다. 왜냐하면 그것이 장황하고 반환 값 유형에 대한 정의가 실제로 없기 때문입니다(내 업데이트 참조). 최대한 간결하게 TypeScript 코드를 작성하려면 어떻게 해야 하나요? </p><p>--- 업데이트 ---</p><p>validator.js의 코드를 추가로 확인했습니다.


<pre class="brush:php;toolbar:false;">const isValid = verifyAttributeString(attrStr, options); if (isValid !== true) { getErrorObject(...)를 반환합니다. } ... 함수 getErrorObject(코드, 메시지, lineNumber) { 반품 { 오류: { 코드: 코드, msg: 메시지, 라인: lineNumber.line || col: lineNumber.col, }, }; }</pre> <p>여기서는 if (typeof result == "boolean") 만 사용할 수 있는 것처럼 보이지만 제 질문에 대한 "범용" 솔루션이 있기를 바랍니다. </p>
P粉797855790
P粉797855790

모든 응답(1)
P粉957723124

맞습니다. TypeScript는 변수 유형에 존재할 수도 있는 알지 못하는 속성에 액세스하는 것을 허용하지 않습니다. 유형이 공용체 유형인 경우 TypeScript에서 해당 속성에 액세스하려면 먼저 공용체 유형의 모든 멤버에 속성이 있어야 합니다.

하지만 변수 유형을 좁히는 방법은 다양합니다. 예를 들어 먼저 값이 true인지 확인할 수 있으며, 그렇지 않은 경우 TypeScript는 통합 유형을 ValidationError로 좁힙니다.

일반적으로 또 다른 옵션은 in 연산자를 사용하는 것이지만 이 경우 공용체 유형에는 객체 유형 이상의 것이 포함되어 있으므로 TypeScript에서는 이를 허용하지 않습니다.

사용자 정의 유형 가드를 정의할 수도 있지만(또는 존재하는 경우 라이브러리에서 제공하는 것을 사용), 이 간단한 경우에는 원하는 작업에 비해 작업이 너무 많은 것 같습니다.

제가 제공한 TypeScript 문서에 자세히 설명된 대로 유형을 축소하는 다른 방법이 있습니다. 말씀하신 것처럼 typeof 연산자의 결과를 확인하는 것도 방법 중 하나입니다.

이 예제에서는 유형 가드를 구현하는 대신 유형 가드가 존재한다는 것만 선언하지만, 다음은 각 메서드를 사용하여 결과 변수 유형의 범위를 좁힐 수 있는 방법입니다.

으아악

TypeScript 놀이터


일반적으로 피하는 것이 가장 좋지만 TypeScript를 유형 어설션의 키워드로 사용할 수도 있습니다.

이러한 유형 어설션을 사용하지 않는 것이 가장 좋은 이유는 TypeScript에 한 유형을 다른 유형으로 처리하도록 지시하기 때문입니다. 따라서 이렇게 하면 유형 안전성이 희생될 수 있습니다.


으아악

그러나 TypeScript 컴파일러보다 상황을 더 잘 이해하는 상황에서는 더 많은 정보를 제공하는 데 사용할 수 있는 도구입니다.

개인적으로는 유형 어설션이 사용된 이유를 설명하고 안전성의 기반이 되는 가정을 언급하면서 항상 의견을 남기는 것이 도움이 된다고 생각합니다.

또한 이 경우 유형 어설션을 사용하여 속성을 확인하면 결과 변수의 유형이 좁아지지 않으므로 이 접근 방식이 사용자의 요구 사항에 정확히 맞지 않을 수 있습니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!