개발/TypeScript

[TypeScript] TypeScript의 상수 단언

xuwon 2024. 12. 11. 11:07

상수 단언은 값을 리터럴 타입으로 고정하여 변수의 타입을 더욱 엄격하게 제어할 수 있는 기능이다.

이를 통해 컴파일러가 해당 값이 변경하지 않는 것을 보장하고, 정확한 타입 추론을 도와준다.
변수 값이 고정되어야 하는 상황에서 특히 유용하다!

 

특징


1. 확장할 수 없는 리터럴 타입

변수의 타입을 리터럴 값으로 고정하여, 확장할 수 없게 만듦.

2. 애플리케이션 전역에서 일관된 값 사용

값을 상수로 고정하여 전역에서 올바른 값을 일관되게 사용할 수 있게 한다.

3. 컴파일러의 정확한 타입 추론

TypeScript 컴파일러가 값의 타입을 정확히 추론할 수 있게 돕는다.

 

let greeting = "Hello, World!";
// TypeScript는 greeting의 타입을 string으로 추론

const greetingConst = "Hello, World!" as const;
// greetingConst의 타입은 "Hello, World!"라는 리터럴 타입으로 고정

 

객체에 상수 단언 사용
const user = {
  name: "Alice",
  age: 30
} as const;

// user의 타입은 다음과 같이 고정:
// {
//   readonly name: "Alice";
//   readonly age: 30;
// }

 

배열에 상수 단언 사용
const colors = ["red", "green", "blue"] as const;

// colors의 타입은 다음과 같이 고정:
// readonly ["red", "green", "blue"]

배열에 상수 단언을 사용하면 튜플로 간주됨.

 

상수 단언을 사용한 타입 추론
const directions = ["up", "down", "left", "right"] as const;

type Direction = typeof directions[number];
// Direction 타입은 "up" | "down" | "left" | "right"
// directions[0] = "up"

function move(direction: Direction) {
  console.log(`Moving ${direction}`);
}

move("up");    // 정상
move("right"); // 정상
// move("forward"); // 오류: 타입 '"forward"'은 'Direction' 타입에 할당할 수 없다.