Skip to content

13. 타입 호환

Woo-Dong93 edited this page Nov 23, 2020 · 1 revision

  • 타입스크립트 코드에서 특정 타입이 다른 타입에 잘 맞는지를 의미합니다.
interface Ironman {
  name: string;
}

class Avengers {
  name: string;
}

let i: Ironman;
i = new Avengers(); // OK, because of structural typing

1. 인터페이스 타입 호환

  • 타입 호환은 오른쪽에 있는 타입이 구조적으로 더 커야 합니다. 더 많은 속성을 가지고 있어야...
interface Developer {
  name: string;
  skill: string;
}
interface Persons {
  name: string;
}
var developer: Developer;
var person: Persons;

developer = person; // 에러 발생 : 왼쪽에 있는 타입이 더 많은 속성을 가지고 있기 때문에...
person = developer; // 에러가 발생하지 않습니다.
  • 인터페이스와 클래스 관계
interface Developer {
  name: string;
  skill: string;
}
class Person {
  name: string;
}
var developer: Developer;
var person: Persons;
developer = new Person(); // 에러 발생 : 구조적 차이

2. 함수에서의 타입 호환

var add = function(a: number) {
}

var sum = function(a: number, b: number) {
}
add = sum; // 에러 발생
sum = add; // 가능 : 호환 가능합니다.

3. 제네릭에서의 타입 호환

  • 타입은 선언되어있으나 로직이 비어 있는 경우
interface Empty<T> {}

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

// 양쪽 다 가능합니다.
empty1 = empty2;
empty2 = empty1;
  • 인터페이스 안에 구조적으로 속성이 존재할 경우
interface NotEmpty<T> {
  data: T;
}

// 구조적인 타입의 차이가 생기게 됩니다.
var notempty1: NotEmpty<string>;
var notempty2: NotEmpty<number>;

// 둘다 에러가 발생합니다.
notempty1 = notempty2;
notempty2 = notempty1;

💒 Home

Home

📆 Planning

📋 요구 사항

📑 프로젝트 설계

📓 Api 명세서

📖 제품 백로그

📺 화면 기획서

📽️ Project

📖 도움말

📷 실행 화면

⚒️ 기술 스택

⚙️ 기술 특장점

✔️ Team Rule

그라운드 룰

☑️ 깃허브 사용 규칙

코딩 컨벤션 규칙

📝 Progress

🌿 1주차 Progress
☘️ 2주차 Progress
🍀 3주차 Progress
🍁 4주차 Progress
🌲 5주차 Progress

📚 학습 정리 공유

🛠️ 기술 관련 공유

Clone this wiki locally