[효리]
**공통 콜백 함수
**를 위한 타입 선언을 제공하는 것이 좋다? 예시가 없으니 잘 이해가 안된다.
[재희]
공통 콜백 함수? 그냥 매개변수의 타입과 리턴 타입이 공통된 콜백 함수를 얘기하는 것 같다.
[효리]
아하. 뭔가 다른 개념이 있는 줄 알았다.
[지윤]
“프로젝트 내부적으로 사용되는 **타입에 선언 병합이 발생하는 것은 잘못된 설계
**이다.” 이 부분이 조금 헷갈린다. 인터페이스만 선언 병합이 되는 게 아니었나? 타입(타입 별칭)에서도 일어난다는 뜻인가?
[효리]
타입(타입 별칭)이 아니고 타입 자체를 말하는 것 같다.
[재희]
인터페이스를 한 프로젝트 내에서 보강을 할 일이 뭐가 있을까? ES5 → ES2015 버전으로 업데이트하는 예시를 책에서 들어줬는데, 우리 같은 경우는 회사에서 기존 프로젝트의 레거시를 새 버전으로 업데이트할 때 등을 예시로 들 수 있을 것 같다. 기존 타입 선언을 보강해서 사용할 수 있을 것 같다.
<aside>
😒 [동호]
레거시가 타입 별칭으로 선언되어 있으면 어떡하죠…
[재희]
그럼 뭐.. 인터페이스로 새로 작성해야죠.
[동호]
그렇습니다. [재희]
그렇습니다.
</aside>
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 이 있다.