프로그램이 유용하려면 숫자, 문자열, 구조체, 불리언 값과 같은 간단한 데이터 단위가 필요합니다. TypeScript는 JavaScript와 거의 동일한 데이터 타입을 지원하며, 열거 타입을 사용하여 더 편리하게 사용할 수 있습니다.
가장 기본적인 데이터 타입은 JavaScript, TypeScript에서 boolean
값이라고 일컫는 참/거짓(true/false) 값입니다.
let isDone: boolean = false;
JavaScript처럼, TypeScript의 모든 숫자는 부동 소수 값입니다. 부동 소수에는 number
라는 타입이 붙혀집니다. TypeScript는 16진수, 10진수 리터럴에 더불어, ECMAScript 2015에 소개된 2진수, 8진수 리터럴도 지원합니다.
let decimal: number = 6;
let hex: number = 0xf00d;
let binary: number = 0b1010;
let octal: number = 0o744;
웹 페이지, 서버 같은 프로그램을 JavaScript로 만들 때 기본적으로 텍스트 데이터를 다루는 작업이 필요합니다. 다른 언어들처럼, TypeScript에서는 텍스트 데이터 타입을 string
으로 표현합니다. JavaScript처럼 TypeScript도 큰따옴표 ("
)나 작은따옴표 ('
)를 문자열 데이터를 감싸는데 사용합니다.
let color: string = "blue";
color = 'red';
TypeScript는 JavaScript처럼 값들을 배열로 다룰 수 있게 해줍니다. 배열 타입은 두 가지 방법으로 쓸 수 있습니다. 첫 번째 방법은, 배열 요소들을 나타내는 타입 뒤에 []
를 쓰는 것입니다.
let list: number[] = [1, 2, 3];
두 번째 방법은 제네릭 배열 타입을 쓰는 것입니다.Array<elemType>
let list: Array<number> = [1, 2, 3];
튜플 타입을 사용하면, 요소의 타입과 개수가 고정된 배열을 표현할 수 있습니다. 단 요소들의 타입이 모두 같을 필요는 없습니다. 예를 들어, number
, string
이 쌍으로 있는 값을 나타내고 싶을 수 있습니다.
// 튜플 타입으로 선언
let x: [string, number];
// 초기화
x = ["hello", 10]; // 성공
// 잘못된 초기화
x = [10, "hello"]; // 오류
JavaScript의 표준 자료형 집합과 사용하면 도움이 될만한 데이터 형은 enum
입니다. C# 같은 언어처럼, enum
은 값의 집합에 더 나은 이름을 붙여줄 수 있습니다.
enum Color {Red, Green, Blue}
let c: Color = Color.Green;
애플리케이션을 만들 때, 알지 못하는 타입을 표현해야 할 수도 있습니다. 이 값들은 사용자로부터 받은 데이터나 서드 파티 라이브러리 같은 동적인 컨텐츠에서 올 수도 있습니다. 이 경우 타입 검사를 하지 않고, 그 값들이 컴파일 시간에 검사를 통과하길 원합니다. 이를 위해, any
타입을 사용할 수 있습니다.
let notSure: any = 4;
notSure = "maybe a string instead";
notSure = false; // 성공, 분명히 부울입니다.
void
는 어떤 타입도 존재할 수 없음을 나타내기 때문에, any
의 반대 타입 같습니다. void
는 보통 함수에서 반환 값이 없을 때 반환 타입을 표현하기 위해 쓰이는 것을 볼 수 있습니다.
function warnUser(): void {
console.log("This is my warning message");
}
void
를 타입 변수를 선언하는 것은 유용하지 않은데, 왜냐하면 그 변수에는 null
또는 undefined
만 할당할 수 있기 때문입니다.
let unusable: void = undefined;
unusable = null; // 성공 `--strictNullChecks` 을 사용하지 않을때만
TypeScript는 undefined
과 null
둘 다 각각 자신의 타입 이름으로 undefined , null로 사용합니다. void
처럼 그 자체로 유용한 경우는 거의 없습니다.
// 이 밖에 이 변수들에 할당할 수 있는 값이 없습니다!
let u: undefined = undefined;
let n: null = null;
never
타입은 절대 발생할 수 없는 타입을 나타냅니다. 예를 들어, never
는 함수 표현식이나 화살표 함수 표현식에서 항상 오류를 발생시키거나 절대 반환하지 않는 반환 타입으로 쓰입니다. 변수 또한 타입 가드에 의해 아무 타입도 얻지 못하게 좁혀지면 never
타입을 얻게 될 수 있습니다.
never
타입은 모든 타입에 할당 가능한 하위 타입입니다. 하지만 어떤 타입도 never
에 할당할 수 있거나, 하위 타입이 아닙니다.(never 자신은 제외) 심지어 any
도 never
에 할당할 수 없습니다.
never
를 반환하는 몇 가지 예제입니다.
// never를 반환하는 함수는 함수의 마지막에 도달할 수 없다.
function error(message: string): never {
throw new Error(message);
}
// 반환 타입이 never로 추론된다.
function fail() {
return error("Something failed");
}
// never를 반환하는 함수는 함수의 마지막에 도달할 수 없다.
function infiniteLoop(): never {
while (true) {
}
}