bravo my life!

[TIL] TypeScript의 불변성은 readonly와 tuple이. 본문

Study/TypeScript

[TIL] TypeScript의 불변성은 readonly와 tuple이.

losajjang 2022. 6. 14. 18:00
728x90

1. readonly로 읽기 전용 타입을 만들 수 있다.

readonly 속성을 지정하게 된다면 속성이 적용된 타입이 실수로 수정되는 것을 막아준다. 불변성이 생기게 되는 것이다.

type Name = string;
type Age = number;
type Player = {
  readonly name: Name;
  age?: Age;
};
const playerMaker = (name: string): Player => ({
  name,
});
const pjm = playerMaker("pjm");
pjm.age = 12;
pjm.name = "lkjj"

배열에도 적용이 가능하다

const numbers: readonly number[] = [1, 2, 3, 4];
numbers.push(1)

array의 내장 함수인 push는 원본을 변경하는 기능을하고 불변성을 깨트리므로 사용이 불가능하지만 불변성을 지켜주는 filter, map등은 사용이 가능하다.

 

2. tuple로 배열의 형태를 만들 수 있다.

정해진 갯수와 정해진 타입의 요소를 가져야 하는 배열을 지정할 수 있는 기능.

const player: [string, number, boolean] = ["pjm", 36, false];
player[0] = 1

 

이렇게 선언된 배열은 접근을 할 때 다른 타입으로 수정을 하지 못하게 보호해준다.

0번째 배열은 문자열이 들어가야 하지만 숫자열로 수정을 하기 때문에 에러가 발행한다.

 

tuple은 readonly와 같이 사용할 수도 있다.

const player: readonly [string, number, boolean] = ["pjm", 36, false];
player[0] = 1;

우측 사진과 같이 아무것도 변경을 할 수 없다.

 

3. any로 TypeScript의 엄격함을 벗어날 수 있다.

TypeScript의 여러 보호 장치들에서 벗어나 자유도를 주고 싶을 때 사용한다.

const a: any[] = [1, 2, 3, 4];
const b: any = true;
a + b;

이런 것이 오류없이 허용된다.