• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

타입 확장 불가능에 대한 질문입니다.

20.10.24 18:24 작성 조회수 179

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

kh님의 프로필

kh

질문자

2020.10.25

자세한 답변 감사드립니다 ^^

0

이종민님의 프로필

이종민

2023.02.17

저도 궁금한 질문이었는데 미리 질문해주신 분 덕분에 감사히 잘 배웠습니다~