타입 호환성
⭐ 같거나 서브타입인 경우, 할당이 가능하다 = 공변
let sub1: 1 = 1;
let sup1: number = sub1; //sub1타입은 sup1타입의 서브 타입이다.
let sub2: number[] = [1];
let sup2: object = sub2;
let sub3 : [number,number] = [1,2]; //튜플 : 길이와 타입이 고정된 배열
let sup3: number[]= sub3;
let sub4: number = 1;
let sup4: any = sub4;
sub4 = sup4; //error가 발생하지 않는다.
let sub5: never = 0 as never;
let sup5: number = sub5;
class Animal {}
class Dog extends Animal {
eat(){}
}
let sub6:Dog = new Dog();
let sup6:Animal = sub6;
let sub7:string = '';
let sup7:string | number = sub7;
//object 각각의 프로퍼티가 대응하는 프로퍼티와 같거나 서브타입이어야 한다.
let sub8: {a:string;b:number} = {a: '', b:1};
let sup8: {a:string |number; b:number} = sub8;
let sub9: Array<{a:string; b:number}> = [{a:'', b:1}];
let sup9:Array<{a:string|number; b:number}> = sub9;
⭐ 함수의 매개변수 타입만 같거나 슈퍼타입인경우 할당이 가능하다 = 반병
(strictFunctionTypes 옵션을 통해 함수를 할당할 시에 함수의 매개변수 타입이 같거나 슈퍼타입이 아닌경우, 에러를 통해 경고한다.)
class Person{}
class Developer extends Person{
coding(){}
}
class StartupDeveloper extends Developer{
burning(){}
}
function tellme(f: (d:Developer) => Developer) {}
tellme(function dToD(d:Developer) : Developer{
return new Developer();
})
tellme(function pToD(d:Person) : Developer { //person이 슈퍼타입인 경우
return new Developer();
})
tellme(function sToD(d:StartupDeveloper) : Developer {
return new Developer(); //error발생
})
Author And Source
이 문제에 관하여(타입 호환성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@stnqls3938/타입-호환성저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)