TypeScript를 이용한 TLP 예제 – 두 정수의 합

두 정수의 합을 타입 레벨(Type Level)에서 구할 수 있을까? 예를들어 다음과 같은 코드가 필요합니다.

type Result1 = Add<3, 4>; // 💡 타입 추론 결과: 7
type Result2 = Add<12, 8>; // 💡 타입 추론 결과: 20

Add라는 타입을 통해 두 정수의 합을 계산합니다. Add 타입에 대한 코드는 다음과 같습니다.

// N의 길이를 가지는 튜플 타입을 생성하는 헬퍼
type BuildTuple<Length extends number, Arr extends unknown[] = []> =
    Arr['length'] extends Length ? Arr : BuildTuple<Length, [...Arr, unknown]>;

// 두 숫자의 배열을 합쳐 전체 길이를 구하는 방식으로 덧셈 구현
type Add<A extends number, B extends number> =
    [...BuildTuple<A>, ...BuildTuple<B>]['length'];

위의 코드를 분석할 때 필요한 사전 지식은 다음과 같습니다. 튜플 타입의 길이는 타입 수준에서 미리 계산할 수 있다는 것이고 tupleType['length']처럼 얻을 수 있습니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다