-
타입 호환성(type Compatibility)Programming/JavaScript & TypeScript 2022. 2. 16. 16:17728x90
타입 호환성
하위타입에는 상위타입이 들어갈 수 없다.
//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