[TypeScript] 유니온 타입 / 타입별칭 / 타입가드

any 타입

  • 타입 스크립트는 타입에 관한 정보가 더 많을수록 더 좋습니다.
  • 타입 정보는 개발자의 의도를 명확하게 전달할 수 있습니다.
  • 효과적인 코드의 유지보수가 가능합니다.
  • any타입을 일부러 사용하지는 말자! - 타입스크립트가 제공하는 타입 검사가 없어지니, 자바스크립트를 쓰는 것과 다를 바 없게 됩니다.
  • 타입을 지정할 수 없는 제한적인 경우에만 사용

유니온 타입

  • 제한된 타입을 동시에 지정하고 싶을 때가 있습니다.
  • | 파이프라인 기호를 사이에 두고 동시에 타입을 지정할 수 있습니다.
let anyVal = number | string;

anyVal은 number나 string 타입 중 아무 타입의 값이 올 수 있습니다.

type strOrNum = number | string;

let numStr : strOrNum = '100';

function convertToString(val : strOrNum) : string {
    return String(val);
}

function convertToNumber(val : strOrNum) : number {
    return Number(val);
}

 

생각할 거리 - 타입 가드 

type strOrNum = number | string;

let numStr : strOrNum = '100';
let item : number;

function converToString(val : strOrNum) : string {
	item = numStr; // 오류!!!
    
    return String(val);
}

범위가 작은 변수(오직 number) 에 큰 변수(string or num)를 넣는 것은 문제가 될 수 있습니다. 타입스크립트는 '발생할 수 있는 모든 가능성'을 고려합니다. val이 string일 가능성이 단 1%라도 있다면, number 타입인 item에 대입하는 것을 허용하지 않습니다. 이것이 타입스크립트가 안전한 이유입니다.

이때에는 typeof operator로 타입검사를 해준 뒤에 사용하면됩니다.

if(typeof val === 'string'){
	item = 0;
} else {
	item = val;
}