타입스크립트의 타입들

타입스크립트의 타입들

원시 타입

타입스크립트도 자바스크립트에서 지원하는 다음 원시 타입들을 지원한다.

boolean

number

string

null

undefined

object

배열

타입스크립트에선 배열을 다음과 같이 쓸 수 있으며 타입스크립트의 배열 내 원소들의 타입도 적는다.

let arr1: Array = [false, true, true]; // 제네릭 배열 let arr2: number[] = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

읽기 전용 배열

배열에서 변경 메소드가 제거된 읽기 전용 배열을 선언할 수도 있다.

let arr: ReadonlyArray = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; arr[2] = 1; // 오류

튜플

타입스크립트의 튜플은 요소의 타입과 크기가 고정된 배열이다. 튜플은 다음과 같이 선언한다.

let tuple: [boolean, number, string]; tuple[0] = true; tuple[1] = "42"; // 숫자형이 들어가야 하는데 문자열형이 들어가서 오류 발생 tuple[2] = "string";

열거

자바스크립트엔 열거형이 없지만 타입스크립트엔 열거형이 있다. 다른 언어들과 비슷하게 열거형의 원소들은 0, 1, 2, ... 순서로 번호가 매겨진다.

원하면 번호를 수동으로 정할수도 있으며 번호로 열거형의 이름(문자열 타입)을 알아낼 수도 있다.

enum 선언문엔 세미콜론을 붙이지 않는다.

enum Status {Play, Stop, Pause, Rec = 10} let p: Status = Status.Play; // 타입은 정수값이지만 헷갈릴수 있으므로 enum 타입을 적는 것이 좋다. console.log(p); // 0 console.log(Status[p]); // Play

any

타입스크립트에선 변수의 타입을 정할 수 있지만 어떤 타입이 오는지 모를 때 어떤 타입이 와도 상관 없다는 것을 명시적으로 정하는 타입도 있다. 이런 경우엔 그 변수에 어떤 타입이 와도 오류를 발생시키지 않는다.

let a: any; a = 10; a = "str"; a = false;

void

어떤 타입도 존재하지 않는 것을 명시적으로 나타낼 때 사용하는 타입이다. 주로 함수의 리턴값이 아무것도 없는 경우 명시적으로 사용할 수 있으며 변수에도 사용할 수 있지만 이 경우엔 보통 undefined 만 대입할 수 있으므로 변수의 타입이 void인 경우는 별로 유용하지 않다.

function print_str(str: string): void { console.log(`[print] : ${str}`); }

never

never 라는 타입은 절대로 발생해서는 안되는 타입을 의미한다.예를 들면 함수의 리턴 타입이 never라면 이 함수는 절대로 리턴값을 반환하는 시퀀스에 도달하지 않는다. (내부에 무한루프가 존재하거나 에러가 발생해서 throw 되어야 한다.)

function loop(): never { while (true); }

타입 단언 (Type assertions)

다른 컴파일 언어의 형변환과 유사하지만 타입스크립트는 컴파일 할 때 실제로 형변환을 하지 않으며 단지 의도된대로 서로 다른 타입에 대해 무엇인가를 하겠다고 알려주는 것을 의미한다.

let b: any = 2; // b는 any 타입으로 선언되었기 때문에 어느 타입이든 올 수 있다. console.log((b as number) + 1); // 여기서 b가 숫자임을 사용자는 알고 있으므로 컴파일러에게 알려준다. console.log((b) + 1); // 이렇게 써도 된다.

from http://profq.tistory.com/55 by ccl(A) rewrite - 2021-09-12 00:27:04