개발새발
값 자체가 타입인 리터럴 타입이 있다 본문
변수를 let로 선언하면 자유롭게 대입할 수 있는 JS에 비해서 TS는 표기한 타입과 일치하는 값만 대입할 수 있기 때문에 JS에 비해 자유도를 제한 받는다.
사실 let의 경우 원시 자료형에 대한 리터럴 타입을 표기하는 경우는 거의 없다. 애초에 그 목적으로 const 변수가 있기 때문이다.
const str = 'hello';
다만 리터럴 타입이 아닌 자료형 타입은 let과 함께 자주 사용된다.
const obj: { name: 'zero' } = { name: 'zero' };
const arr: [1Z 3, 'five'] = [1, 3, 'five'];
const func: (amount: number, 니nit: string) => string
= (amount, unit) => amount + 니nit;
위 코드는 객체를 표시하는 리터럴 타입이다. 함수 리터럴 타입에 매개 변수와 반환 값의 타입을 표기했으므로 실제 값에서는 타입 표기를 생략할 수 있다.
const obj = { name: 'zero' };// const obj: { name: string }
const arr = [1, 3, 'five' ]; // const arr: (string ] number)[]
위 코드의 (string | number)[] 는 문자열 또는 숫자의 배열이라는 뜻이다. 여기서 값이 변하지 않는 것이 확실하다면 as const라는 특별한 접미사(suffix)를 붙이면 된다.
- as const를 사용하면 값이 절대 변하지 않도록(immutable) 타입스크립트가 강제한다.
- 객체의 속성 앞에는 readonly가 자동으로 붙어서 수정할 수 없게 된다.
- 배열도 readonly가 붙어서 push, pop 같은 메서드를 사용할 수 없게 된다.
- 실수로 데이터를 변경하는 걸 방지할 수 있어 더 안전한 코드를 작성할 수 있다!
const obj = { name: 'zero' } as const;
obj.name = 'nero'; // ❌ 에러 발생! 읽기 전용이다.
const arr = [1, 3, 'five' ] as const;
arr.push(7); // ❌ 에러 발생! 배열을 변경하는 메서드(push, pop 등)가 막히게 됩니다
'Typescript' 카테고리의 다른 글
유니언 타입으로 OR 관계를 표현하자 (0) | 2025.03.13 |
---|---|
타입으로 쓸 수 있는 것을 구분하자 (0) | 2025.03.13 |
배열 말고 튜플도 있다 (0) | 2025.03.13 |
TS에서 타입 추론을 적극 활용하자 (0) | 2025.03.12 |
TS는 변수, 매개변수, 반환값에 타입을 붙이면 된다. (0) | 2025.03.11 |