B 인터페이스는 A 인터페이스이기 위한 모든 조건이 충족되어 있습니다. A 인터페이스에 존재하는 name 속성을 B 인터페이스도 갖고 있기 때문입니다. 따라서 B 인터페이스는 구조적 타이핑 관점에서 A 인터페이스라고 볼 수 있습니다. 반대로 A 인터페이스에는 age 속성이 존재하지 않으므로 B 인터페이스가 아닙니다. 이처럼 완전히 구조가 같아야만 동일한 것도 아니고, B가 A라고 해서 A도 B인 것도 아닙니다.
2.10.2절에서 배열에 매핑된 객체 타입이 적용된 경우에도 구조적 타이핑의 특성이 나타납니다.
type Arr = number[];
type CopyArr = {
[Key in keyof Arr]: Arr[Key];
}
const copyArr: CopyArr = [1, 3, 9];
CopyArr은 객체 타입인데도 숫자 배열을 대입할 수 있습니다. CopyArr 타입에 존재하는 모든 속성을 숫자 배열이 갖고 있으므로 둘은 구조적으로 동일한 셈이기 때문입니다. 더 간단하게는 다음과 같은 코드도 가능합니다.
type SimpleArr = { [key: number]: number, length: number };
const simpleArr: SimpleArr = [1, 2, 3];