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 타입의 속성과 겹치지 않을 이름이면 됩니다.

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