← 질문 목록
#81깊이 0
이름이 다른 두 타입이 호환되는 기준은?
대상 타입이 요구하는 멤버를 소스 타입이 호환되는 형태로 갖추면 이름이나 선언 계보가 달라도 대입할 수 있다. TypeScript는 기본적으로 구조를 비교한다.
| 기준 | 구조적 타이핑 | 명목적 타이핑 |
|---|---|---|
| 호환 조건 | 멤버 구조 | 선언 이름·계보 |
| 재사용 | 암시적 | 명시적 |
| 구분 강도 | 약함 | 강함 |
소스에 속성이 더 많아도 대입은 대체로 허용된다. 다만 새 객체 리터럴을 바로 넣을 때는 초과 속성 검사로 오타 가능성을 잡는다.
구조가 우연히 같은 식별자 타입은 서로 섞일 수 있다. 브랜드 필드를 더하면 명목적 구분을 흉내 내어 UserId와 OrderId 같은 혼용을 막을 수 있다.
타입 검사는 컴파일 시 사라진다. 외부 입력의 실제 구조는 런타임 검증이 필요하다.
추천 꼬리질문
관련 질문
- 서로 다른 List 타입 인자는 런타임에 남는가?언어 · 런타임타입이 컴파일에만 있고 런타임에 지워지거나 구조로만 남는다는 같은 경계를 다룬다.
- 타입스크립트의 구조적 타이핑은 무엇을 기준으로 판별하는가?언어 · 런타임타입스크립트의 구조적 타이핑은 이름이 다르더라도 내부 구조가 같으면 호환되는 구체적인 사례에 해당한다.
- 인터페이스와 추상 클래스는 무엇으로 구분하는가?프레임워크타입 계약을 무엇으로 정의하는가 — 선언과 구조라는 두 답을 각각 다룬다.
- 이름이 같은 클래스가 다른 타입이 되는 조건은?언어 · 런타임
- 값 타입과 참조 타입은 무엇으로 구분하는가?언어 · 런타임