Branded Type
type Brand<K, T> = K & { __brand: T};
type Food = Brand<{
protein: number;
carbohydrates: number;
fat: number;
}, 'Food'>
const burger = {
protein: 100,
carbohydrates: 100,
fat: 100,
burgerBrand: '버거킹'
}
calculateCalorie(burger)
/** 타임검사결과 : 오류 (NOT OK) */
- 의도적으로
__brand
와 같은 프로퍼티를 추가시켜, 개발자가 함수의 매개변수로 정의한 타입 외에는 호환이 될 수 없도록 강제하는 기법