ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 타입 호환성(type Compatibility)
    Programming/JavaScript & TypeScript 2022. 2. 16. 16:17
    728x90

    타입 호환성

    하위타입에는 상위타입이 들어갈 수 없다.

    //sub1은 sup타입의 서브타입니다.
    let sub1:1 = 1;
    let sup1:number = sub1;
    //sub1 = sup1 //Type 'number' is not assignable to type '1'.
    
    //sub2타입은 sup2의 서브타입니다. 
    let sub2:number[] = [1]
    let sup2:object = sub2
    //sub2 = sup2 //error, 
    
    //sub3은 sup3타입의 서브 타입니다. 
    let sub3:[number, number] = [1,2];
    let sup3:number[] = sub3
    //sub3 = sup3 error
    
    let sub4 :number = 1
    let sup4:any = sub4
    sub4 = sup4 //가능, any니까...
    
    let sub5:never= 0 as never;
    let sup5:number = sub5;
    
    //sub5 = sup5
    
    class Animal {}
    class Dog extends Animal {
        eat() {}
    }
    
    let sub6:Dog = new Dog();
    let sup6:Animal = sub6
    //sub6 = sup6 // 반대는 불가능...eat이 없다...

     

    같거나 서브타입인 경우, 할당이 가능하다. => 공변

    함수의 매계변수 타입만 같거나 슈퍼타입인 경우, 할당이 가능하다 

    class Person{}
    class Developer extends Person {}
    class StartupDeveloper extends Developer {
    burning()
    }
    
    //tellme 함수의 매계변수는 함수를 받는 구조 
    function tellme(f:(d:Developer) => Developer) {}
    
    // Developer => Developer 에다가 Developer => Developer을 할당하는 경우
    tellme(function dToD(d:Developer):Developer {
        return new Developer()
    })
    // Developer => Developer 에다가 Person => Developer을 할당하는 경우
    tellme(function pToD(d:Person):Developer {
        return new Developer()
    })
    // Developer => Developer 에다가 StartupDeveloper => Developer을 할당하는 경우
    // 옵션을 켜지 않으면 에러가 뜨지 않음..
    //이건 에러!
    //strictOptionTypes를 켜면 된다. 
    //함수 할당시에 함수의 매개변수 타입이 같거나 슈퍼타입인 경우가 아닌 경우 에러
    //d가 Developer의 하위 타입이라서 에러남
    tellme(function sToD(d:StartupDeveloper):Developer {
        return new Developer
    })

    'Programming > JavaScript & TypeScript' 카테고리의 다른 글

    TypeScript Compiler(타입스크립트 컴파일러)  (0) 2022.02.16
    타입 별칭(Type Alias)  (0) 2022.02.16
    TypeSystem  (0) 2022.02.16
    사용자의 관점으로 코드 바라보기  (0) 2022.02.16
    Primitive Type  (0) 2022.02.15
Designed by Tistory.