📑 목차
TypeScript의 가장 기초가 되는 원시 타입(Primitive Type) 과 값 자체가 타입이 되는 리터럴 타입(Literal Type) 에 대해 정리해 본다.
1. 원시 타입 (Primitive Type)
원시 타입이란 동시에 하나의 값만 저장할 수 있는 타입을 의미한다.
배열이나 객체 같은 비원시 타입들이 동시에 여러 개의 값을 저장할 수 있는 것과 달리, number, string, boolean 등은 딱 하나의 값만 가질 수 있다.
참고: 실습 시 tsconfig.json의 isolateModules 옵션이 true라면, 파일 내에 export 키워드가 하나 이상 있어야 에러가 발생하지 않는다.
1-1. number 타입
자바스크립트에서 숫자를 의미하는 모든 값을 포함한다. 단순 정수뿐만 아니라 소수, 음수, 그리고 Infinity, NaN 같은 특수 값도 포함된다.
// number
let num1: number = 123; // 양수
let num2: number = -123; // 음수
let num3: number = 0.123; // 실수
let num4: number = -0.123; // 음의 실수
let num5: number = Infinity; // 무한대
let num6: number = -Infinity; // 음의 무한대
let num7: number = NaN; // Not a Number
💡 타입 주석 (Type Annotation)
변수명 뒤에 콜론(:)과 함께 타입을 정의하는 문법을 ‘타입 주석’ 또는 ‘타입 어노테이션’이라고 부른다.
주의사항number 타입으로 정의된 변수에는 문자열 등 다른 값을 넣을 수 없으며, 해당 타입에 맞지 않는 메서드(예: toUpperCase)는 사용할 수 없다.
// 에러 발생 예시
// num1 = 'hello'; // ❌ Type 'string' is not assignable to type 'number'.
// num1.toUpperCase(); // ❌ Property 'toUpperCase' does not exist on type 'number'.
1-2. string 타입
문자열을 의미하는 타입이다. 큰따옴표("), 작은따옴표('), 백틱(```), 템플릿 리터럴을 모두 포함한다.
// string
let str1: string = "Hello";
let str2: string = 'Hello';
let str3: string = `Hello`;
let str4: string = `Hello ${num1}`; // 템플릿 리터럴
1-3. boolean 타입
참(true)과 거짓(false)만을 저장하는 타입이다.
// boolean
let bool1: boolean = true;
let bool2: boolean = false;
1-4. null과 undefined 타입
각각 오직 null 값과 undefined 값 하나만 포함하는 타입이다.
// null
let null1: null = null;
// undefined
let unde1: undefined = undefined;
2. strictNullChecks 옵션 (엄격한 null 검사)
자바스크립트에서는 변수를 초기화할 때 임시로 null을 넣어두곤 했다. 하지만 타입스크립트에서는 number 타입에 null을 넣으면 에러가 발생한다. null은 number 타입에 포함되지 않기 때문이다.
let numA: number = null; // ❌ 기본적으로 에러 발생
만약 null을 다른 타입의 임시 값으로 허용하고 싶다면 tsconfig.json에서 설정을 변경해야 한다.
tsconfig.json 설정
{
"compilerOptions": {
"strictNullChecks": false,
// ...
}
}
strictNullChecks:null값을 변수에 할당하는 것을 엄격하게 검사할지 여부를 결정하는 옵션이다.true(기본값):null타입이 아닌 변수에는null을 할당할 수 없다. (strict옵션이 켜져 있으면 자동으로 켜진다.)false: 모든 타입의 변수에null을 자유롭게 할당할 수 있다.
Note: 안전한 타이핑을 위해 특별한 이유가 없다면 strictNullChecks는 **true로 유지(또는 삭제하지 않음)**하는 것이 좋다.
3. 리터럴 타입 (Literal Type)
타입스크립트에는 string, number처럼 범용적인 타입 외에, 딱 하나의 값만 포함하는 타입도 존재한다. 이를 리터럴(값) 타입이라고 부른다.
변수의 타입을 특정 값 그 자체로 지정하면, 해당 변수는 그 값 이외의 어떤 값도 가질 수 없게 된다.
// 숫자 리터럴 타입
let numA: 10 = 10;
// numA = 12; // ❌ 10 이외의 값 할당 불가
// 문자열 리터럴 타입
let strA: "Hello" = "Hello";
// 불리언 리터럴 타입
let boolA: true = true;
요약
- 원시 타입: 하나의 값만 저장한다 (
number,string,boolean,null,undefined). - strictNullChecks:
null값을 엄격하게 관리하는 옵션이다. 안전한 코드를 위해 켜두는 것을 권장한다. - 리터럴 타입: 값 자체가 타입이 되어, 지정된 값만 허용하는 타입이다.
