P粉9577231242023-07-29 09:49:07
맞습니다. TypeScript는 변수 유형에 존재할 수도 있는 알지 못하는 속성에 액세스하는 것을 허용하지 않습니다. 유형이 공용체 유형인 경우 TypeScript에서 해당 속성에 액세스하려면 먼저 공용체 유형의 모든 멤버에 속성이 있어야 합니다.
하지만 변수 유형을 좁히는 방법은 다양합니다. 예를 들어 먼저 값이 true인지 확인할 수 있으며, 그렇지 않은 경우 TypeScript는 통합 유형을 ValidationError로 좁힙니다.
일반적으로 또 다른 옵션은 in 연산자를 사용하는 것이지만 이 경우 공용체 유형에는 객체 유형 이상의 것이 포함되어 있으므로 TypeScript에서는 이를 허용하지 않습니다.
사용자 정의 유형 가드를 정의할 수도 있지만(또는 존재하는 경우 라이브러리에서 제공하는 것을 사용), 이 간단한 경우에는 원하는 작업에 비해 작업이 너무 많은 것 같습니다.
제가 제공한 TypeScript 문서에 자세히 설명된 대로 유형을 축소하는 다른 방법이 있습니다. 말씀하신 것처럼 typeof 연산자의 결과를 확인하는 것도 방법 중 하나입니다.
이 예제에서는 유형 가드를 구현하는 대신 유형 가드가 존재한다는 것만 선언하지만, 다음은 각 메서드를 사용하여 결과 변수 유형의 범위를 좁힐 수 있는 방법입니다.
일반적으로 피하는 것이 가장 좋지만 TypeScript를 유형 어설션의 키워드로 사용할 수도 있습니다.
이러한 유형 어설션을 사용하지 않는 것이 가장 좋은 이유는 TypeScript에 한 유형을 다른 유형으로 처리하도록 지시하기 때문입니다. 따라서 이렇게 하면 유형 안전성이 희생될 수 있습니다.
그러나 TypeScript 컴파일러보다 상황을 더 잘 이해하는 상황에서는 더 많은 정보를 제공하는 데 사용할 수 있는 도구입니다.
개인적으로는 유형 어설션이 사용된 이유를 설명하고 안전성의 기반이 되는 가정을 언급하면서 항상 의견을 남기는 것이 도움이 된다고 생각합니다.
또한 이 경우 유형 어설션을 사용하여 속성을 확인하면 결과 변수의 유형이 좁아지지 않으므로 이 접근 방식이 사용자의 요구 사항에 정확히 맞지 않을 수 있습니다.