TypeScript

[TypeScript] 원시 타입(Primitive Type)과 리터럴 타입(Literal Type)

2025년 11월 26일
5
TypeScriptStudy기초문법Primitive TypeLiteral Type

📑 목차

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을 넣으면 에러가 발생한다. nullnumber 타입에 포함되지 않기 때문이다.

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;

요약

  1. 원시 타입: 하나의 값만 저장한다 (number, string, boolean, null, undefined).
  2. strictNullChecks: null 값을 엄격하게 관리하는 옵션이다. 안전한 코드를 위해 켜두는 것을 권장한다.
  3. 리터럴 타입: 값 자체가 타입이 되어, 지정된 값만 허용하는 타입이다.
@taemni

@taemni

안녕하세요, 차근차근 성장 중인 조태민입니다.

instagram

댓글