타입 호환(Type Compatibility)

최현호·2022년 4월 4일
0

TypeScript

목록 보기
13/14
post-thumbnail

타입 호환(Type Compatibility)

타입스크립트 코드에서 특정 타입이 다른 타입에 잘 맞는지를 의미합니다.


구조적 타이핑 예시

  • 구조적 타이핑(structural typing)이란 코드 구조 관점에서 타입이 서로 호환되는지의 여부를 판단하는 것입니다.

인터페이스

interface Developer{
    name: string;
    skill: string;
}

interface Person{
    name: string;
}

let developer: Developer;
let person: Person;

developer = person; // 에러이유 : 왼쪽에 있는 변수가 더 큰 관계를 가지고 있어서
person = developer; // 에러가 안뜬다.
  • 오른쪽에 있는 타입이 더 많은 속성을 가지거나, 구조적으로 더 컸을 때 왼쪽과 호환이 됩니다.

인터페이스와 클래스

interface Developer{
    name: string;
    skill: string;
}

class Person{
    name: string;
}

let developer: Developer;

developer = new Person(); // 에러 발생
  • 인터페이스나 클래스, 타입별칭 과 같은 것으로 확인하지 않고
  • 내부적으로 존재하고 있는 속성과 티입에 대한 정의들에 대해 비교를 합니다.

함수 비교

let add = function(a: number){
    // ...
}

let sum = function(a: number, b: number){
    // ...
}

add = sum; // 에러
sum = add // 가능
  • 위의 함수의 차이는 파리미터의 개수, 구조적으로는 sumadd 보다 큽니다.

제네릭 비교

interface Empty<T> {
    // ...
}

let empty1: Empty<string>;
let empty2: Empty<number>;

// 아래 모두 호환 가능
empty1 = empty2; 
empty2 = empty1;
  • 위 인터페이스는 일단 속성이 없기 때문에 같은 타입으로 간주됩니다.

interface NotEmpty<T> {
    date: T;
}

let notempty1: NotEmpty<string>;
let notempty2: NotEmpty<number>;

// 모두 호환 불가능
// 동일한 속성을 가지지만 타입의 차이가 발생한다.
notempty1 = notempty2;
notempty2 = notempty1; 
  • 인터페이스 NotEmpty에 넘긴 제네릭 타입이 data 속성에 할당 되었으므로 서로 다른 타입으로 간주됩니다.

참고

profile
현재 블로그 : https://choi-hyunho.com/

0개의 댓글

관련 채용 정보