반응형
타입호환이란 타입스크립트에서 특정 타입이 다른 타입에 잘 맞는지지를 체크하는것을 의미합니다. 타입스크립트 관점에서는 타입이 정의되어 있는 속성의 타입을 가지고 코드가 호환되는지를 확인하는것이 구조적 타이팅이라고 합니다. 아래의 코드로 확인해 보겠습니다.
interface Cafejun {
name: string;
skill : string
}
class Coffee {
name : string;
}
var cafejun : Cafejun;
var coffee : Coffee;
cafejun = coffee // Error 출력
coffee = cafejun // 정상 동작
위 코드는 타입스크립트에서 어떻게 인식을 하는지를 보면 속성인 name,skill 으로 이루어진 Cafejun 인터페이스와 name 속성으로 이루어진 Coffee 클래스로 선언된 각각의 변수들에 대한 타입이 서로 호화이 되는지 확인하는 코드입니다. 타입스크립트에서는 아래와 같은 에러메세지를 출력합니다.
직역을 하면 Coffee Type에서는 skill Property 가 없지만 Cafejun 에는 skill Property 가 필요하다고 메세지를 보냅니다. 하지만 반대로 선언을 한다면 에러가 출력이 안됩니다. 즉 더 넒은 범위의 타입이 작은 범위의 타입을 포함한다면 타입 호환이 가능하다고 볼수 있습니다.
함수에서 파라미터에 대한 타입을 확인해 보면
var add =function (a: number) {
// ...
}
var sum = function (a: number, b: number) {
// ...
}
add = sum; // Error
sum = add; // 정상 동작
함수에서는 파라미터가 많은 타입에 선언이 되면 타입이 구조적으로 호환이 된다고 볼수가 있습니다.
interface NotEmpth<T> {
data: T;
}
var empty1 : NotEmpth<number>;
var empty2 : NotEmpth<string>;
empty1 = empty2;
제너릭에서도 위 코드처럼 타입호환을 테스트 해볼수 있습니다.
반응형
'개발이야기 > Typescript' 카테고리의 다른 글
유틸리티 타입 - Partial (0) | 2021.03.13 |
---|---|
타입스크립트 모듈시스템 (0) | 2021.03.09 |
타입 단원(Type Assertion) & 타입 가드 (Type Guard) (0) | 2021.03.07 |
타입 추론 (Type Inference) (0) | 2021.03.03 |
타입 스크립트 타입 선언 연습 (0) | 2021.03.02 |