728x90
728x90
서브타입 1
// sub1 타입은 sup1 타입의 서브 타입이다.
let sub1: 1 = 1;
let sup1: number = sub1;
sub1 = sup1; // error! Type 'number' is not assignable to type'1'.
// sub2 타입은 sup2 타입의 서브타입이다.
let sub2: number[] = [1];
let sup2: object = sub2;
sub2 = sup2 // error! Type '{}' is missing the following properites form type
// 'number[]': length, pop, push, concat, and 16 more
// sub 3 타입은 sup3 타입의 서브 타입이다.
let sub3: [number, number] = [1, 2];
let sup3: numbr[] = sub3;
sub3 = sup3; // error! type 'number[]' is not assignable to type '[number, number]'.
// Target requires 2 element(s) but source may have fewer.
서브타입 2
// sub4 타입은 sup4 타입의 서브 타입이다.
let sub4: number = 1;
let sup4: any = sub4;
sub4 = sup4;
// sub5 타입은 sup5 타입의 서브 타입이다.
let sub5: never = 0 as never;
let sup5: number = sub5;
sub 5 = sup5 // error! Type 'number' is not assignable to type 'never'.
class Animal {}
class Dog extends Animal {
eat() {}
}
// sub6 타입은 sup6 타입의 서브 타입이다.
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 sup: string | number= sub7;
// object - 각각의 프로퍼티가 대응하는 프로퍼티와 같거나 서브타입이어야 한다.
let sub8: { a: string; b: number } = { a: '', b: 1};
let sup8: { a: string | number; b: number } = sub8;
// array - object 와 마찬가지
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) {}
// 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 를 할당하는 경우
tellme(function sToD(d: StartupDeveloper): Developer {
return new Developer();
});
// 사용자에게 선택옵션을 줌. (옵션을 켜지 않으며 융통성을 발휘해서 에러가 발생하지 않음)
// strictFunctionTypes 옵션을 켜면 에러를 통해 경고한다.
strictFunctionTypes 옵션을 켜면
- 함수를 할당할 시에 함수의 매개변수 타입이 같거나 슈퍼타입인 경우가 아닌 경우, 에러를 통해 경고한다.
728x90
728x90
'TypeScript' 카테고리의 다른 글
[TS] TypeScript Type 별칭(Type Alias) (0) | 2021.09.02 |
---|---|
[TS] TypeScript 타입체계 | noImplicityAny | strictNullChecks (0) | 2021.09.01 |
[TS] TypeScript Basic Types 정리 (0) | 2021.08.31 |
[TS] TypeScript 자료형_Primitive Types (0) | 2021.08.30 |
[TS] TypeScript _ VS CODE 설치 및 설정 (0) | 2021.08.28 |