12. 함수 표현식에 타입 적용하기


[효리] **공통 콜백 함수**를 위한 타입 선언을 제공하는 것이 좋다? 예시가 없으니 잘 이해가 안된다.

[재희] 공통 콜백 함수? 그냥 매개변수의 타입과 리턴 타입이 공통된 콜백 함수를 얘기하는 것 같다.

[효리] 아하. 뭔가 다른 개념이 있는 줄 알았다.

13. 타입과 인터페이스의 차이점 알기


[지윤] “프로젝트 내부적으로 사용되는 **타입에 선언 병합이 발생하는 것은 잘못된 설계**이다.” 이 부분이 조금 헷갈린다. 인터페이스만 선언 병합이 되는 게 아니었나? 타입(타입 별칭)에서도 일어난다는 뜻인가?

[효리] 타입(타입 별칭)이 아니고 타입 자체를 말하는 것 같다.

[재희] 인터페이스를 한 프로젝트 내에서 보강을 할 일이 뭐가 있을까? ES5 → ES2015 버전으로 업데이트하는 예시를 책에서 들어줬는데, 우리 같은 경우는 회사에서 기존 프로젝트의 레거시를 새 버전으로 업데이트할 때 등을 예시로 들 수 있을 것 같다. 기존 타입 선언을 보강해서 사용할 수 있을 것 같다.

<aside> 😒 [동호] 레거시가 타입 별칭으로 선언되어 있으면 어떡하죠…

[재희] 그럼 뭐.. 인터페이스로 새로 작성해야죠.

[동호] 그렇습니다. [재희] 그렇습니다.

</aside>

14. 타입 연산과 관련된 제너릭 사용으로 반복 줄이기


type Pick<T, K> = { [k in K]: T[K] } // 'K' 타입은 'string | number | symbol' 타입에 할당할 수 없습니다.

// k는 T 타입과 무관하고 범위가 너무 넓다.
// K는 인덱스로써 사용이 가능한 string | number | symbol 타입이 되어야 한다.
// 실제로는 K는 T의 키의 부분 집합이 되어야 한다.

type Pick<T, K extends keyof T> = { [k in K]: T[K] }

[지윤] ‘K’ 타입은 string, number, symbol 저 부분. 원래 number도 들어가나?

[재희] 그렇다. 객체의 키로 될 수 있는 것들 string, number, symbol 이 있다.