TIL - 김민수 - 23/10/04

오늘은 subTyping (타입 호환성)에 대한 재밌는 개념을 배워서 몇 자 적어봤습니다 ✍️

공식문서: https://www.typescriptlang.org/ko/docs/handbook/type-compatibility.html

관련 레퍼런스: https://toss.tech/article/typescript-type-compatibility

유튜브: https://www.youtube.com/watch?v=I6V2FkW1ozQ

타입스크립트는 구조적 서브타이핑 시스템을 활용합니다.

구조적 서브타이핑 시스템을 설명하는 간단한 예시를 가져와봤습니다.

typescript playground URL

type User = {
  name: string;
  email: string;
}

type Minsoo = {
  name: string;
  email: string;
}

위와 같이 동일한 멤버를 갖고있는 타입은 서로 다른 타입으로 간주하지 않기 때문에 다음 코드에서는 에러를 발생하지 않습니다.

let minsoo: Minsoo = {name: 'minsoo', email: '[email protected]'};
const user: User = {name: 'somebody', email: '[email protected]'};

// 구조적 타입 시스템에 대한 예시, 동일한 멤버를 가지고 있다면 호환된다
// 타입 에러가 발생하지 않습니다.
minsoo = user;

흔히 VoidFunction 타입을 활용하면, 어떤 타입이든 인자가 없고 returnType이 void 이면 호환되는 것을 경험하셨을 텐데

타입스크립트의 구조적 서브타이핑 시스템 덕분이라고 할 수 있습니다.

구조적 서브타이핑은

만약 어떤 새가 오리처럼 걷고, 헤엄치고, 꽥꽥거리는 소리를 낸다면 나는 그 새를 오리라고 부를 것이다.

라는 의미에서 덕 타이핑 (duck typing) 이라고 한다고 합니다.