as const가 없는 경우export const MESSAGE_TYPE = {
INFO: 'info',
MESSAGE: 'message',
PROCESS: 'process',
ERROR: 'error',
};
위와 같이 작성된 객체는 JavaScript의 일반적인 객체와 비슷합니다. TypeScript는 이 객체의 각 값이 단순히 문자열이라고 생각합니다. 따라서 이 값을 사용하는 변수에는 어떤 문자열이든 넣을 수 있습니다.
예를 들어:
let messageType = MESSAGE_TYPE.INFO; // OK, 'info'는 문자열이니까 가능
messageType = "other"; // OK, 다른 문자열도 가능
messageType 변수에 "other" 같은 전혀 다른 문자열도 넣을 수 있습니다.
as const가 있는 경우export const MESSAGE_STATUS = {
ID: 'ID',
SYSTEM_CONTEXT: 'SYSTEM_CONTEXT',
ANALYZING_SEMANTIC: 'ANALYZING_SEMANTIC',
END: 'END',
ERROR: 'ERROR',
} as const;
// TypeScript는 각각의 값을 고정된 문자열로 추론합니다.
let messageStatus: 'ID' | 'SYSTEM_CONTEXT' | 'ANALYZING_SEMANTIC' | 'END' | 'ERROR';
as const를 사용하면 TypeScript는 이 객체의 값들이 절대 변하지 않는 고정된 값이라고 생각합니다. 따라서 이 값들을 사용하는 변수에는 오직 그 값들만 넣을 수 있습니다.
예를 들어:
let messageStatus = MESSAGE_STATUS.ID; // OK, 'ID'는 고정된 값이니까 가능
messageStatus = "other"; // Error, 'other'는 허용된 값이 아니므로 오류 발생
messageStatus 변수에는 CHAT_MESSAGE_STATUS에 정의된 값들만 넣을 수 있고, "other" 같은 값은 넣을 수 없습니다.
as const를 사용하면 코드가 더 안전해집니다. 예를 들어, 실수로 잘못된 값을 넣는 것을 방지할 수 있습니다.as const가 없으면: 변수에 아무 문자열이나 넣을 수 있습니다.as const가 있으면: 변수에 오직 지정된 값들만 넣을 수 있습니다.