지난 챕터에서 타입스크립트에서 사용할 수 있는 여러가지 types 들에 대해서 알아보았다. 이어서 아직 남아있는 여러 타입들도 알아보자.
유니온과 인터섹션은 사용되는 타입이라기 보다는 타입에 관련된 하나의 기능이다.
어릴 때 수학에서 접했던 합집합 교집합과 비슷한 느낌이다.
A,B 라는 두 사물이 있을 때 이를 유니온하면 이 둘을 합친 결과이고 인터섹션하면 둘의 공통부분이 결과로 나온다
type Cat = {name : string, purrs : boolean};
type Dog = {name : string, barks : boolean, wags : boolean};
type CatOrDogOrBoth = Cat | Dog;
type CatAndDog = Cat & Dog;
위와 같이 사용할 수 있다.
자바스크립트처럼 타입스크립트 배열도 연결, 푸시, 검색, 슬라이스 등을 지원하는 특별한 객체이다.
let a = [1,2,3]; // number[]
let b = ['a', 'b']; // string[]
let c = [1, 'a']; // (stinrg | number)[]
이렇게 유니온을 사용하면 하나의 배열에 여러 타입의 값 들을 할당할 수 있다. 하지만 대개는 배열은 하나의 타입으로만 정의해서 사용한다.
다른 타입이 들어있는 배열을 사용하면 배열에 어떤 타입이 들어있는지 요소를 미리 검사하는 처리를 해주어야 하기 때문에 번거롭기 때문이다.
튜플은 배열의 서브 타입이다. 튜플은 길이가 고정되어있고, 각 인덱스의 타입이 알려진 배열의 일종이라고 생각하면 된다.
let b : [string, string, number] = ['malcom', 'glad', 1938];
앞서 말했듯이 배열은 대부분 동형을 가지고 있도록 설계하므로 튜플의 사용을 권장하지는 않는다.
자바스크립트는 null, undefined
두 가지 값으로 부재를 표현한다.
타입스크립트에서 undefined
값의 타입은 오직 undefined
뿐이고 null
값의 타입은 null
뿐이라는 점에서 특별한 타입이다.
타입스크립트는 null, undefined
이외에도 void, never
타입도 제공한다.
일반적으로 void와 never는 함수에서 사용되는데 void는 아무것도 반환하지 않는 함수를 정의 할 때, nver는 절대 반환하지 않는 함수타입을 정의할 때 사용한다
절대 반환하지 않는 함수?
무슨 말인지 감이 잘 안오기도 하는데 간단히 말하면 예외를 던지거나 영원히 실행되는 함수를 의미한다.
// null을 반환하는 함수
function a (x:number){
if(x < 10) return x;
return null;
}
// undefined
function b() {
return undefined
}
// void 생략 가능하다
function c() : void {
let a = 2 + 2;
}
// never
function d() {
throw TypeError('I always error');
}
enum
은 해당 타입으로 사용할 수 있는 값을 열거하는 기법이다. enum
은 키를 값에 할당하는, 순서가 없는 자료형이다.
키가 컴파일 타임에 고정된 객체라고 생각하면 쉽다.
enum Language {
English,
Spanish,
Russian
}
열거형의 이름은 단수로 하고 첫 문자는 대문자로 하는 것이 일반적이다.
열거형에 문자열 값을 사용하거나 문자열과 숫자값을 혼합할 수 있다.
enum Color {
Red = '#c1000',
Blue = '#007ac1',
white = 255
}
let red = Color.Red // Color
let c = Color[255]; // string
let d = Color[6]; // string
Color[6]
은 접근할 수 없어야 하지만 타입스크립트는 접근을 허용한다. 더 안전한 열거형 타입인 const enum
을 이용하면 된다.
const enum Language {
English,
Russian,
Spanish
}
let a = Language.English // Language
let b = Language[0]; // 에러 : const enum 멤버는 문자열 리터럴로만 접근 가능하다
enum을 안전하게 사용하는 방법은 까다롭기 때문에 enum을 사용하지 않는 것을 권장한다.
이 포스팅은 타입스크립트 프로그래밍(보리스 체르니 저)를 토대로 작성되었습니다.