본문 바로가기
프론트개발/TypeScript

[TypeScript] 타입 호환성과 별칭

by YoungJu 2022. 7. 18.
반응형
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;
반응형

댓글