더북(TheBook)
type Brand<T, B> = T & { __brand: B };
type KM = Brand<number, 'km'>;
type Mile = Brand<number, 'mile'>;

function kmToMile(km: KM) {
    return km * 0.62 as Mile;
}

const km = 3 as KM;
const mile = kmToMile(km);
// const mile: Mile
const mile2 = 5 as Mile;
// Argument of type 'Mile' is not assignable to parameter of type 'KM'.
kmToMile(mile2);

Brand라는 새로운 타입을 만들었습니다. T는 원래 자료형을 의미하고, B는 새로 만들 자료형을 의미합니다. & 연산자로 원래 자료형과 새로 만들 자료형을 합칩니다. 2.11절에서 말했듯, 객체 타입이 아니더라도 & 연산자를 사용할 수 있습니다. 반드시 속성 값이 __brand여야 하는 것은 아닙니다. 다른 T 타입의 속성과 겹치지 않을 이름이면 됩니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.