학습 공간 개념 · 판단 · 실험

Fanta Lab

질문 129 · 실전 면접 답변

TypeScript의 구조적 타입 호환성은 어떻게 동작하나요?

이렇게 답해 보세요 (핵심 답변)

TypeScript는 두 타입의 이름이 같은지가 아니라, 실제 값이 가진 프로퍼티와 메서드의 구조(모양)가 요구 조건을 만족하는지를 기준으로 호환성을 판단하는 구조적 타이핑(Structural Typing)을 따릅니다. 예를 들어 함수가 { name: string } 타입을 요구할 때, 별도로 선언된 User 타입이든 일반 객체 변수든 내부에 문자열인 name 프로퍼티를 가지고 있다면 추가 프로퍼티가 더 있더라도 호환되는 것으로 인정합니다. 덕분에 상속 계층을 억지로 묶지 않아도 테스트용 목(mock) 객체나 유틸리티 함수를 유연하게 조합할 수 있습니다.

함께 설명하면 좋은 이유 (꼬리질문 대비)

  1. 단, 변수에 거치지 않고 객체 리터럴({ name: 'Kim', age: 20 })을 그 자리에서 직접 대입할 때는 오타를 잡기 위해 '초과 프로퍼티 검사(Excess Property Check)'가 예외적으로 동작합니다.
  2. 또한 클래스에 private이나 protected 멤버가 포함되어 있으면 구조만 같다고 호환되지 않고 같은 클래스 선언에서 유래했는지까지 함께 확인합니다.

면접에서 자주 하는 실수

구조적 타입 호환성은 컴파일 타임에 필요한 멤버의 존재 여부를 확인하는 규칙일 뿐, 런타임에 instanceof 검사를 통과한다는 뜻은 아닙니다.

원리와 예제까지 읽기

공식 참고 자료

질문 목록 출처 ↗ · 원본 129번을 바탕으로 질문과 답변을 새로 정리했습니다.

← TypeScript