-
Notifications
You must be signed in to change notification settings - Fork 5
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
- 타입 호환은 오른쪽에 있는 타입이 구조적으로 더 커야 합니다. 더 많은 속성을 가지고 있어야...
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(); // 에러 발생 : 구조적 차이
var add = function(a: number) {
}
var sum = function(a: number, b: number) {
}
add = sum; // 에러 발생
sum = add; // 가능 : 호환 가능합니다.
- 타입은 선언되어있으나 로직이 비어 있는 경우
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;