0Pricing
TypeScript Academy · 강의

타입 수준 비교

전적으로 타입 수준에서 숫자를 비교합니다.

타입 수준 비교은(는) CoddyKit의 무료 TypeScript Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 TypeScript Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. TypeScript Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

숫자 비교하기

숫자 리터럴 타입을 비교할 때도 튜플을 활용합니다. 두 숫자를 같은 속도로 줄여 가며 어느 쪽이 먼저 0에 도달하는지 확인하는 방식입니다. 빈 튜플에 먼저 도달하는 쪽이 더 작은 숫자입니다.

type BuildTuple<N extends number, Acc extends unknown[] = []> =
  Acc["length"] extends N ? Acc : BuildTuple<N, [...Acc, unknown]>;

리터럴의 동일성

숫자 리터럴이 같은지는 상호 할당 가능성으로 확인합니다. 두 리터럴이 서로의 확장 타입일 때 같습니다. 튜플로 감싸면 유니언으로 인한 예기치 않은 결과를 피할 수 있습니다.

type NumEquals<A extends number, B extends number> =
  [A] extends [B] ? ([B] extends [A] ? true : false) : false;

type X = NumEquals<3, 3>; // true
type Y = NumEquals<3, 4>; // false

줄여 가며 비교하기

A > B의 경우 두 숫자에 해당하는 튜플을 만들고, 단계마다 양쪽에서 요소를 하나씩 제거합니다. A에는 아직 요소가 남아 있는 동안 B가 먼저 비면 A가 더 큰 것입니다.

type GreaterThan<A extends number, B extends number> =
  BuildTuple<A> extends [...BuildTuple<B>, unknown, ...unknown[]]
    ? true : false;

type X = GreaterThan<5, 3>; // true
type Y = GreaterThan<3, 5>; // false

패턴 읽는 방법

[...BuildTuple<B>, unknown, ...unknown[]]이라는 패턴은 길이 B인 접두부 뒤에 적어도 하나 이상의 요소가 있다는 뜻입니다. A가 이 패턴에 맞으면 A의 요소 수가 B보다 많으므로 A > B입니다.

type A = GreaterThan<4, 4>; // false (no extra element)
type B = GreaterThan<6, 2>; // true

작다

LessThan은 인수의 순서를 뒤집은 GreaterThan일 뿐입니다. 다시 유도하지 말고 재사용하세요.

type LessThan<A extends number, B extends number> =
  GreaterThan<B, A>;

type X = LessThan<3, 5>; // true
type Y = LessThan<5, 3>; // false

크거나 같음

비교와 동일성 검사를 결합합니다. A >= B는 A > B이거나 A == B일 때 참입니다.

type Gte<A extends number, B extends number> =
  GreaterThan<A, B> extends true
    ? true
    : NumEquals<A, B>;

type X = Gte<5, 5>; // true
type Y = Gte<3, 5>; // false

재귀적 비교

두 숫자를 하나가 0에 도달할 때까지 함께 감소시켜 비교하는 방법도 있습니다. 이 방식은 같은 속도로 줄여 가는 개념을 명확하게 보여 줍니다. 먼저 0에 도달하는 쪽이 더 작습니다.

type Cmp<A extends number, B extends number> =
  A extends 0
    ? (B extends 0 ? "eq" : "lt")
    : B extends 0
      ? "gt"
      : Cmp<Dec<A>, Dec<B>>;

type X = Cmp<3, 5>; // "lt"

Dec 의존성

재귀 버전은 이전 레슨의 Dec가 필요합니다. 각 단계에서 양쪽의 표시를 하나씩 제거합니다. 둘 다 0이면 같고, 한쪽만 0이면 다른 쪽이 더 큽니다.

type Dec<N extends number> =
  BuildTuple<N> extends [unknown, ...infer R] ? R["length"] : 0;

동일성과 할당 가능성 비교

주의하세요. number extends number는 참이지만, 이는 리터럴이 같다는 뜻이 아닙니다. 여기서의 비교는 3과 5처럼 구체적인 리터럴 타입을 전제로 하며, 범용 number 타입을 전제로 하지 않습니다.

type A = NumEquals<3, 3>;          // true
type B = 3 extends number ? 1 : 0; // 1 (assignability, not equality)

정렬 기준 만들기

비교를 사용하면 순서 규칙을 표현할 수 있습니다. 예를 들어 두 숫자로 이루어진 튜플이 오름차순으로 정렬되어 있는지 타입 수준에서 결정할 수 있습니다.

type IsSorted<A extends number, B extends number> =
  GreaterThan<A, B> extends true ? false : true;

type X = IsSorted<2, 5>; // true
type Y = IsSorted<5, 2>; // false

신중하게 사용하기

비교에는 재귀 비용이 듭니다. 작은 범위로 제한된 값을 검증하는 데는 유용하지만, 일반적인 숫자 라이브러리는 아닙니다. 피연산자를 작게 유지하고, 전체 재귀보다 단계가 얕은 접두부 패턴 형식을 우선 사용하세요.

type A = GreaterThan<9, 4>; // true (cheap, prefix pattern)

빠른 확인

타입 수준 비교를 제대로 이해했는지 테스트해 보세요.

복습

이제 타입 시스템에서 숫자의 순서를 정할 수 있습니다.

  • 리터럴의 상호 할당 가능성을 통해 동일성을 확인합니다.
  • GreaterThan은 B 길이의 접두부와 추가 요소 하나를 통해 구현합니다.
  • LessThan은 인수의 순서를 뒤집고, Gte는 동일성을 추가합니다.
  • 작은 리터럴 숫자에 사용할 수 있으며, 범용 number 타입에는 사용할 수 없습니다.

다음: 이 모든 것을 실용적인 도구로 만들기입니다.

자주 묻는 질문

“타입 수준 비교” 강의는 무료인가요?

네 — “타입 수준 비교” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 TypeScript Academy 강의 전체를 잠금 해제할 수 있습니다. TypeScript Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“타입 수준 비교”에서 뭘 배우나요?

전적으로 타입 수준에서 숫자를 비교합니다. 브라우저에서 직접 실행하는 실습 코드로 TypeScript Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

TypeScript Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 TypeScript Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.

“타입 수준 비교” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 TypeScript Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 TypeScript Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 튜플 길이로 세기
  2. 타입 수준 덧셈과 뺄셈
  3. 타입 수준 비교
  4. 실용적인 숫자 타입 유틸리티
← TypeScript Academy(으)로 돌아가기