타입 확장하기 (p.130)
주어진 타입에 무분별하게 속성을 추가하여 사용하는 것보다 타입을 확장해서 사용하는 것이 좋음
적절한 네이밍을 사용해 타입의 의도를 명확히 표현할 수도 있고, 코드 작성 단계에서 예기치 못한 버그도 예방할 수 있기 때문
/** * 방법1 타입 내에서 속성 추가 * 기존 Menu 인터페이스에 추가된 정보를 전부 추가 */ interface Menu { name: string; image: string; gif?: string; // 요구 사항 1. 특정 메뉴를 길게 누르면 gif 파일이 재생되어야 한다 text?: string; // 요구 사항 2. 특정 메뉴는 이미지 대신 별도의 텍스트만 노출되어야 한다 } /** * 방법2 타입 확장 활용 * 기존 Menu 인터페이스는 유지한 채, 각 요구 사항에 따른 별도 타입을 만들어 확장시키는 구조 */ interface Menu { name: string; image: string; } /** * gif를 활용한 메뉴 타입 * Menu 인터페이스를 확장해서 반드시 gif 값을 갖도록 만든 타입 */ interface SpecialMenu extends Menu { gif: string; // 요구 사항 1. 특정 메뉴를 길게 누르면 gif 파일이 재생되어야 한다 } /** * 별도의 텍스트를 활용한 메뉴 타입 * Menu 인터페이스를 확장해서 반드시 text 값을 갖도록 만든 타입 */ interface PackageMenu extends Menu { text: string; // 요구 사항 2. 특정 메뉴는 이미지 대신 별도의 텍스트만 노출되어야 한다 }
부분이 있는데, 사실 위의 예시로는 [방법 1]이 더 적절하지 않나.. 많은 속성들이 추가된 것도 아닌데, 굳이 싶음.
차라리 [방법 1]을 활용하고, gif && <Menu />
요런 식으로 해주고, 좀 더 복잡해지면 [방법 2]로 타입을 확장하는 게 좋지 않나.
물론 [방법 2]가 의도가 명확히 보인다는 점에서 좋지만 .. 그런 생각이 들었음