타입스크립트 기본 타입
Introduction
좋은 프로그램이 되기 위해서는 numbers, strings, structures, boolean values와 같이 간단한 데이터 단위 몇 가지를 사용할 수 있어야 한다. 자바스크립트에서 사용하고 있는 타입과 거의 동일하게 타입스크립트에서도 사용할 수 있으며, 이는 개발을 진행하는 데 있어 도움을 준다.
Boolean
가장 기본적인 데이터 타입은 true/false 값을 가진 boolean 값이 있다.
let isDone: boolean = false;
Number
타입스크립트에서 모든 숫자는 부동 소수점 수이다. 이 부동 소수점 수는 number로 표현된다. 타입스크립트에서는 16진수, 10진수 외에도 ECMAScript 2015에서 도입된 2진수, 8진수를 지원한다.
let decimal: number = 6;
let hex: number = 0xf00d;
let binary: number = 0b1010;
let octal: number = 0o744;
String
웹 페이지 및 서버 사이드 자바스크립트에서 프로그램을 만드는 기본적인 부분에 문자열을 사용한다. 다른 언어와 마찬가지로 타입스크립트에서도 문자열을 나타내기 위해 string 타입을 사용하며, 문자열 데이터를 둘러싸기 위해 큰따옴표("), 작은따옴표(')를 사용한다.
let color: string = "blue";
color = 'red';
또한, 여러 줄이나 표현식이 포함된 템플릿 문자열을 사용할 수도 있다. 이 문자열은 역따옴표(`) 문자로 둘러싸여 있으며, 내장된 표현은 ${ expr }의 형식이다.
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 sentence: string = "Hello, my name is " + fullName + ".\\n\\n" +
"I'll be " + (age + 1) + " years old next month.";
Array
자바스크립트와 마찬가지로 타입스크립트에서도 배열을 사용할 수 있다. 배열은 두 가지 방법의 하나로 쓸 수 있다. 첫 번째, 사용하고자 하는 타입 뒤에 배열을 나타내기 위해 []를 사용한다.
let list: number[] = [1, 2, 3];
두 번째 방법은 제네릭 배열 타입인 Array<elemType>
이다.
let list: Array<number> = [1, 2, 3];
Tuple
튜플은 동일하지 않은 타입을 배열로 표현할 수 있으며, 타입 요소의 개수는 명시해야 한다. 다음과 같이 문자열과 숫자를 쌍으로 나타낼 수 있다.
// Declare a tuple type
let x: [string, number];
// Initialize it
x = ["hello", 10]; // OK
// Initialize it incorrectly
x = [10, "hello"]; // Error
인덱스를 사용해 배열의 요소에 접근할 경우, 해당 요소는 올바른 타입이어야 한다. 배열의 1번 인덱스는 number
이기 때문에 substring
을 사용할 수 없다.
console.log(x[0].substring(1)); // OK
console.log(x[1].substring(1)); // Error, 'number' does not have 'substring'
정의한 배열 이외의 요소에 접근하면 다음과 같이 오류가 발생한다.
x[3] = "world"; // Error, Property '3' does not exist on type '[string, number]'.
console.log(x[5].toString()); // Error, Property '5' does not exist on type '[string, number]'.
Enum
타입스크립트에서 표준 데이터타입으로 추가되었다. C#
처럼 Enum
은 숫자 집합에 별칭을 지정할 수 있다.
enum Color {Red, Green, Blue}
let c: Color = Color.Green;
기본적으로 enum
은 0부터 각 요소의 번호를 매길 수 있지만, 요소의 값을 직접 설정해 변경할 수 있다. 위의 예제를 아래와 같이 0이 아닌 1에서 시작할 수 있다.
enum Color {Red = 1, Green, Blue}
let c: Color = Color.Green;
또는 enum
의 모든 값을 직접 설정할 수 있다.
enum Color {Red = 1, Green = 2, Blue = 4}
let c: Color = Color.Green;
enum
의 편리한 기능은 숫자로 매핑된 값을 알 수 있다는 점이다. 예를 들어, 숫자 2를 알고 있지만, 색상 중에 매핑된 내용을 모른다면 아래와 같이 찾을 수 있다.
enum Color {Red = 1, Green, Blue}
let colorName: string = Color[2];
console.log(colorName); // Displays 'Green' as its value is 2 above
Any
서드파티 라이브러리와 같이 동적인 콘텐츠를 사용할 때, 알 지 못하는 변수의 형태를 표현해야 할 수도 있다. 이러한 경우에 any
를 사용해서 타입 체크를 선택하지 않고 컴파일 시간 검사를 통과하도록 한다.
let notSure: any = 4;
notSure = "maybe a string instead";
notSure = false; // okay, definitely a boolean
any는 기존의 자바스크립트를 사용하는 강력한 방법이며, 컴파일하는 동안 옵트인(opt-in), 옵트아웃(opt-out)으로 타입 체크를 차례로 진행한다. 다른 언어의 Object
가 유사한 역할을 수행한다고 생각할 수 있지만, Object
는 변수 값을 할당만 할 수 있다. 실제로 존재하는 메서드라도 임의의 메서드를 호출 할 수는 없다.
let notSure: any = 4;
notSure.ifItExists(); // okay, ifItExists might exist at runtime
notSure.toFixed(); // okay, toFixed exists (but the compiler doesn't check)
let prettySure: Object = 4;
prettySure.toFixed(); // Error: Property 'toFixed' doesn't exist on type 'Object'.
아래와 같이 다른 타입이 섞여도 사용할 수 있다.
let list: any[] = [1, true, "free"];
list[1] = 100;
Void
void
는 any
와 반대이다. 어떤 타입도 가질 수가 없다. 일반적으로 값을 반환하지 않는 함수의 타입이 있다.
function warnUser(): void {
console.log("This is my warning message");
}
void
타입은 undefined
또는 null
만 할당 할 수 있어 유용하지 않다.
let unusable: void = undefined;
Null and Undefined
타입스크립트에서 undefined
, null
은 각각의 타입을 가진다. void
와 마찬가지로 유용하지 않다.
// Not much else we can assign to these variables!
let u: undefined = undefined;
let n: null = null;
기본적으로 null
, undefined
는 모든 타입의 하위 타입이다. 즉, null
, undefined
를 number
같은 타입에 할당할 수 있다.
Never
Never
는 절대 발생하지 않는 값을 나타내는 타입이다. never
는 함수 표현식의 리턴 타입이거나 항상 예외를 던지는 화살표 함수 표현식처럼 반환하지 않는 표현식이다.
// Not much else we can assign to these variables!
let u: undefined = undefined;
let n: null = null