' 정말로 하고 싶니?'를 고려하여 시작하십시오.
HTML에서 직접 열거 형을 참조하는 데 아무런 문제가 없지만 경우에 따라 유형 안전을 잃지 않는 더 깨끗한 대안이 있습니다. 예를 들어 다른 답변에 표시된 접근 방식을 선택하면 구성 요소에서 다음과 같이 TT를 선언했을 수 있습니다.
public TT =
{
// Enum defines (Horizontal | Vertical)
FeatureBoxResponsiveLayout: FeatureBoxResponsiveLayout
}
HTML에 다른 레이아웃을 표시하려면 *ngIf
각 레이아웃 유형마다 하나씩 있으며 구성 요소의 HTML에서 열거 형을 직접 참조 할 수 있습니다.
*ngIf="(featureBoxResponsiveService.layout | async) == TT.FeatureBoxResponsiveLayout.Horizontal"
이 예제는 서비스를 사용하여 현재 레이아웃을 가져 와서 비동기 파이프를 통해 실행 한 다음 열거 형 값과 비교합니다. 꽤 장황하고 복잡하며 보는 것이별로 재미 있지 않습니다. 또한 열거 형의 이름을 공개하는데, 그 자체가 지나치게 장황 할 수 있습니다.
HTML에서 형식 안전성을 유지하는 대안
또는 다음을 수행하고 구성 요소의 .ts 파일에서 더 읽기 쉬운 함수를 선언 할 수 있습니다.
*ngIf="isResponsiveLayout('Horizontal')"
훨씬 더 깨끗합니다! 그러나 누군가 'Horziontal'
실수로 입력하면 어떻게됩니까? HTML에서 열거 형을 사용하려는 모든 이유는 형식이 안전해야합니까?
우리는 여전히 keyof 와 일부 typescript 마술 로 그것을 달성 할 수 있습니다 . 이것은 함수의 정의입니다.
isResponsiveLayout(value: keyof typeof FeatureBoxResponsiveLayout)
{
return FeatureBoxResponsiveLayout[value] == this.featureBoxResponsiveService.layout.value;
}
의 사용주의 FeatureBoxResponsiveLayout[string]
하는 변환 열거의 숫자 값에 전달 된 문자열 값입니다.
잘못된 값을 사용하면 AOT 컴파일과 함께 오류 메시지가 표시됩니다.
""H4orizontal ""유형의 인수는 ""Vertical "유형의 매개 변수에 지정할 수 없습니다. | "수평"
현재 VSCode는 H4orizontal
HTML 편집기에서 밑줄을 긋기 에는 충분하지 않지만 컴파일 타임에 --prod build 또는 --aot 스위치를 사용하여 경고를 받게됩니다. 향후 업데이트에서도 개선 될 수 있습니다.