TypeScript에서 공용체 유형 및 배열 단순화

Patricia Arquette
풀어 주다: 2024-10-12 14:32:02
원래의
734명이 탐색했습니다.

Simplifying Union Types and Arrays in TypeScript

TypeScript로 작업할 때 공용체 유형과 해당 유형의 가능한 모든 값을 포함하는 배열을 정의해야 할 수도 있습니다. 일반적인 접근 방식은 다음과 같이 작성하는 것입니다.

type Taste = 'しょうゆ' | 'みそ' | 'とんこつ';
const tastes = ['しょうゆ', 'みそ', 'とんこつ'];
로그인 후 복사

얼핏 보면 괜찮은 것 같습니다. 그러나 여기에는 숨겨진 문제가 있습니다. 옵션을 변경하거나 추가할 때마다 Taste 조합 유형과 Taste 배열을 모두 업데이트해야 합니다. 이러한 중복된 노력은 실수로 이어질 수 있으며 코드 유지 관리를 더욱 지루하게 만듭니다.

다행히 중복을 줄여 이를 단순화할 수 있는 방법이 있습니다. TypeScript에서 as const 어설션과 typeof를 사용하면 공용체 유형과 배열의 정의를 한 곳에 통합할 수 있습니다. 위 코드를 리팩터링하는 방법은 다음과 같습니다.

const tastes = ['しょうゆ', 'みそ', 'とんこつ'] as const;
type Taste = (typeof tastes)[number];
로그인 후 복사

이 접근 방식에는 여러 가지 이점이 있습니다.

  1. 단일 정보 소스:

    맛 배열에서 값 목록을 한 번만 정의합니다. Taste 유형은 이 배열에서 자동으로 파생되므로 목록을 업데이트해야 하는 경우 한 곳에서만 수행하면 됩니다.

  2. 유형 안전:

    const로 사용하면 TypeScript는 맛 배열을 문자열 배열 대신 리터럴 유형이 있는 튜플로 처리합니다. 이렇게 하면 Taste 유형이 정확하게 유지되고 취향 값과 일치하게 됩니다.

  3. 유지관리 개선:

    Taste 유형은 배열에서 생성되므로 유형과 실제 값이 일치하지 않을 위험이 없습니다. 이렇게 하면 버그 가능성이 줄어들고 코드 유지 관리가 더 쉬워집니다.

사용 사례 예시

이제 코드에서 Taste 유형을 사용할 때마다 맛 배열의 값과 일치하는 것이 보장됩니다.

function describeTaste(taste: Taste): string {
  switch (taste) {
    case 'しょうゆ':
      return 'Savory soy sauce flavor.';
    case 'みそ':
      return 'Rich miso flavor.';
    case 'とんこつ':
      return 'Creamy pork broth flavor.';
    default:
      return 'Unknown taste';
  }
}

const allTastes: Taste[] = tastes; // Safe, because they match the type!
로그인 후 복사

이 패턴은 코드의 가독성을 향상시킬 뿐만 아니라 특히 동기화를 유지해야 하는 여러 값을 처리할 때 오류 발생 가능성을 줄여줍니다.

이 전략을 수용하면 TypeScript 코드를 더욱 유지 관리하고 확장 가능하게 만들 수 있습니다. 이는 대규모 값 세트를 처리하거나 시간이 지남에 따라 코드베이스가 커질 때 특히 유용합니다.

위 내용은 TypeScript에서 공용체 유형 및 배열 단순화의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!