작성
·
259
5
type test1 = {name: string}
type test2 = test1 & {age: number}
const test3: test2 = { name: 'd', age: 33 }
찾아보니 제가 보기에는 위 코드가 interface 처럼 확장이 되는 것 같던데, 제가 쓴 코드는 확장의 개념이 맞는지 아닌지 질문드립니다.
답변 3
13
안녕하세요 kh님, 좋은 질문 남겨주셨네요! :) 적어주신 코드는 인터섹션(&)을 이용한 타입 별칭 확장입니다.
const test3: test2 = { name: 'd', age: 33 }
위 코드는 "타입 별칭 test2는 test1과 { age: number }를 모두 만족하는 또 하나의 타입으로 정의한다"는 의미입니다. 바로 뒤 강좌에서 인터섹션 연산자를 이용한 타입 정의 방법에 대해서 다루고 있으니 보시면 이해하시는 데 도움이 될거에요 :)
그래서 kh님께서 질문하신 내용처럼 이것도 인터페이스랑 똑같이 확장되는 것 같은데? 라고 생각하실 수 있을 것 같아요. 그런데 엄밀히 따지고 보면 test1의 타입에 인터섹션을 이용해서 타입을 추가로 정의한 것이지 test1의 타입을 extends 로 상속 받아 확장하는 개념은 아닙니다. 강의에서 말씀 드린 확장은 타입 간에 extends 키워드를 이용하여 타입 범위를 넓히는 것을 의미했던 건데 관련된 설명이 부족해서 헷갈리셨을 것 같습니다. 이후 강의 업데이트 진행할 때 해당 내용을 좀 더 자세히 보완하도록 하겠습니다. 좋은 피드백 주셔서 감사합니다 kh님 :)
아참 또 "확장"이라는 관점에서는 동일한 이름으로 여러 가지 타입을 선언하여 타입 정의를 병합(Declaration Merging)하는 것도 포함될 수 있는데요. 관련 내용은 처음 배우시는 분들 입장에서 괜히 어렵게 느껴지실 수 있을 것 같아 별도로 언급하지 않았습니다. 혹시 관심 있으시면 관련 문서들 안내드릴 테니 한번 살펴보시면 좋을 것 같아요 :)
1
0