TypeScript는 JavaScript와 거의 동일한 데이터 타입을 지원하며, 열거 타입을 사용하여 더 편리하게 사용할 수 있습니다.
let isDone: boolean = false;
가장 기본적인 데이터 타입은 boolean이라고 일컫는 참/거짓 타입입니다.
let decimal: number = 6;
let hex: number = 0xf00d;
let binary: number = 0b1010;
let octal: number = 0o744;
모든 숫자는 부동 소수 값입니다. 또한 16진수, 10진수 뿐만 아니라 2진수, 10진수 리터럴도 지원합니다.
let color: string = "blue";
color = 'red';
Javascript와 마찬가지로 '와 "를 사용합니다.
또한 Javascript와 마찬가지로 `을 사용하면 다음과 같이 표현식을 표함시킬 수 있습니다.
let fullName: string = `Bob Bobbington`;
let age: number = 37;
let sentence: string = `Hello, my name is ${ fullName }.
I'll be ${ age + 1 } years old next month.`;
let list: number[] = [1, 2, 3];
let list: Array<number> = [1, 2, 3];
위 두 표현 모두 배열을 나타낼 수 있습니다.
튜플 타입을 사용하면, 요소의 타입과 개수가 고정된 배열을 표현할 수 있습니다. 단 요소들의 타입이 모두 같을 필요는 없습니다
// 튜플 타입으로 선언
let x: [string, number];
// 초기화
x = ["hello", 10]; // 성공
// 잘못된 초기화
x = [10, "hello"]; // 오류
enum Color {Red, Green, Blue}
let c: Color = Color.Green;
C언어와 비슷하게 Typescript는 열거형을 제공합니다.
enum Color {Red = 1, Green, Blue}
let colorName: string = Color[2];
console.log(colorName); // 값이 2인 'Green'이 출력됩니다.
enum의 유용한 기능 중 하나는 위와 같이 매겨진 값을 사용해 enum 멤버의 이름을 알아낼 수 있다는 것입니다.
let notSure: any = 4;
notSure = "maybe a string instead";
notSure = false;
애플리케이션을 만들 때, 알지 못하는 타입을 표현해야 할 수도 있습니다. 이 값들은 사용자로부터 받은 데이터나 서드 파티 라이브러리 같은 동적인 컨텐츠에서 올 수도 있습니다. 이 경우 컴파일을 통과하기 위해 Any 타입을 사용합니다.
Object 와의 차이점은 지정된 타입의 메소드를 사용할 수 있는가? 없는가입니다.
let notSure: any = 4;
notSure.ifItExists(); // 성공
notSure.toFixed(); // 성공
let prettySure: Object = 4;
prettySure.toFixed(); // 오류
또한, any 타입은 타입의 일부만 알고 전체는 알지 못할 때 유용합니다.
let list: any[] = [1, true, "free"];
list[1] = 100;
void는 어떤 타입도 표현할 수 없음을 나타내기 떄문에 Any의 반대라고 생각할 수 있습니다. void는 보통 함수에서 반환 값이 없을 때 반환 타입을 표현하기 위해 쓰이는 것을 볼 수 있습니다.
function warnUser(): void {
console.log("This is my warning message");
}
TypeScript는 undefined 과 null 둘 다 각각 자신의 타입 이름으로 undefined , null로 사용합니다.
let u: undefined = undefined;
let n: null = null;
기본적으로 null 과 undefined는 다른 모든 타입의 하위 타입니다. 이건, null과 undefined를 number 같은 타입에 할당할 수 있다는 것을 의미합니다.
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) {
}
}
Type assertions 은 컴파일러에게 "날 믿어, 난 내가 뭘 하고 있는지 알아"라고 말해주는 방법입니다.
첫번째 방법은 angle-bracket 문법입니다.
let someValue: any = "this is a string";
let strLength: number = (<string>someValue).length;
두번째 방법은 as- 문법입니다. 이게 더 편할 것 같습니다. 또한 JSX와 사용할 때에는 as- 문법만 허용된다고 합니다.
let someValue: any = "this is a string";
let strLength: number = (someValue as string).length;