타입 호환(type compatibility)이란 ?

타입 호환(type compatibility)은 서로 다른 타입이 2개 있을 경우 특정 타입이 다른 타입에 포함되는지를 의미합니다.

타입 호환 예시 코드

아래 코드에서 숫타입에 문자열 타입을 할당하려 하고 있습니다. 따라서 타입에러가 발생할 수 있습니다.

let a: string = "text";
let b: number = 10;
b = a;

위 코드와 달리 아래 코드에서는 string 타입에 "text" 라는 문자열 타입을 할당하였습니다. 이 경우에는 "text" 문자열이 string 타입에 포함되기 때문에 타입 에러는 발생하지 않습니다.

let a: string = "text";
let b: "text" = "text";
a = b;

즉, 아래와 같이 string 타입에 "text" 문자열이 포함되어 있기 때문에 타입 호환이 되는것입니다.

image (4).png

다른 언어와의 차이점 : 구조적 타이핑(structural typing)

타입스크립트의 타입호환은 다른 언어와의 차이점이 존재합니다.

아래 코드에서는 name 속성을 갖는 인터페이스와 클래스를 선언하여 a 변수를 선언하고 인터페이스 타입 Person를 지정한 후 Devloper 클래스를 생성하여 변수에 할당한 코드입니다.

이렇게 하면 에러가 발생하지 않습니다. 이런 코드에서 에러가 발생하지 않는 이유는 구조적 타이핑(structural typing) 특성 때문입니다.

interface Person {
  name: "string";
}

class Developer {
  name: string;
}

let a: Person;
a = new Developer();

**구조적 타이핑(structural typing)**이란 타입 유형보다는 타입 구조로 호환 여부를 판별하는 언어적 특성을 의미합니다.