[Typescript]타입 호환성

rondido·2023년 2월 23일
0

Typescript

목록 보기
6/6
post-thumbnail

타입 호환성

서브 타입

let sub1: 1 = 1;
let sup1: number = sub1;
sub1 = sup1; //error type 'number' is not assignable to type '1';

let sub2: number[] = [1];
let sup2: object = sub2;
sub2 = sup2; //error! Type '{}' is missing the following properties from type 'number[]';

let sub3: [number, number] = [1,2];
let sup3: number[] = sub3;
sub3 = sup3; //error type 'number[]' is not assignable to type '[number,number]'.

서브 타입(2)

let sub4: number =1;
let sup4: any = sub4;
sub4 = sup4;

let sub5: never = 0 as never;
let sup5: number = sub5;
sub5 = sup5; // error type 'number'is not assignable to type 'never'

class Animal{}
class Dog extends Animal{
	eat(){}
}

let sub6: Dog = new Dog();
let sup6 : Animal = sub6;
sub6 = sup6; //error Property 'eat' is missing in type 'SubAnimal' but required in type 'SubDog'.

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

//primitive type
let sub7:string ='';
let sup7: string | number = sub7;

//object -각각의 프로퍼티가 대응하는 프로퍼티와 같거나 서브타입이어야 함.
let sub8:{a:string; b:number} = {a:'', b:1};
let sub8:{a:string|number; b:number} = sub8;

//array - obejct 와 마찬가지
let sub9: Array<{a:string; b: number}> = [{a:'', b:1}];
let sup9: Array<{a:string| number; b: number}> = sub8;

함수의 매개변수 타입만 같거나 슈퍼타입 경우, 할당 가능하다 ⇒ 반병

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{
	return new Developer();
});

tellme(function sToD(d:StartupDeveloper): Developer{
	return new Developer();
})
profile
개발 옆차기

0개의 댓글