반응형
SMALL
타입 호환성(Type Compatibility)
// sub 타입은 sup 타입의 서브 타입.
let sub1: 2 = 2;
let sup1: number = sub1;
sub1 = sup1; // error Type 'number' is not assignable to type '2'.
let sub2: number[] = [3];
let sup2: object = sub2;
sub2 = sup2; // error Type '{}' is missing the following properties from type'number[]'
let sub3: [number, number] = [3,4];
let sup3: number[] = sub3;
sub3 = sup3; //error Type 'number[]' is not assignable to type '[number, number]'
// sub 타입은 sup 타입의 서브 타입.
let sub1: number = 1;
let sup1: any = sub1;
sub1 = sup1;
let sub2: never = 0 as never;
let sup2: number = sub2;
sub2 = sup2; // error Type 'number' is not assignable to type 'never'.
class Animal {}
class Cat extends Animal {
eat() {}
}
let sub3: Cat = new Cat();
let sup3: Animal = sub3;
sub3 = sup3;
// error Property 'eat' is missing in type 'SubAnimal' but required in type 'SubCat'.
같거나 서브 타입인 경우, 할당이 가능합니다. 이것을 공변이라 합니다.
// primitive type
let sub1: string = '';
let sup1: string | number = sub1;
// object - 프로퍼티가 대응하는 프로퍼티와 같거나 서브타입.
let sub2: { a: string; b: number} = {a: '', b: 2};
let sup2: { a: string | number; b: number} = sub2;
// array - object와 같음
let sub3: Array<{a: string; b:number}> = [{a: '', b:3}];
let sup3: Array<{a: string | number; b: number}> = sub3;
타입 별칭(Type Alias)
- Interface와 비슷.
- Primitive, Union Type, Tuple, Function
- 기타 직접 작성해야 하는 타입에 다른 이름 지정 가능.
- 만들어진 타입의 refer로 사용하는 것이지 타입을 만드는 것은 아님.
Aliasing Primitive
type MyStringType = string;
const str = 'hello';
let myStr: MyStringType = 'mike';
myStr = str;
Aliasing Union Type
let person: string | number = 0;
person = 'Mike';
type StringOrNumber = string | number;
let other: StringOrNumber = 0;
other = 'Jack';
Aliasing Tuple
let person: [string, number] = ['Mike', 24];
type PersonTuple = [string, number];
let other: PersonTuple = ['Jack', 20];
Aliasing Function
type EatType = (food: string) => void;
반응형
'프론트개발 > TypeScript' 카테고리의 다른 글
[TypeScript] 클래스 (0) | 2022.07.20 |
---|---|
[TypeScript] 인터페이스(Interface) (0) | 2022.07.19 |
[TypeScript] 타입 시스템 (0) | 2022.07.18 |
[TypeScript] 타입 스크립트의 타입(2) (0) | 2022.07.16 |
[TypeScript] 타입 스크립트의 타입(1) (0) | 2022.07.16 |
댓글