number 인덱스 시그니처보다는 Array, 튜플, ArrayLike를 사용하기

이재철·2023년 4월 4일
0

TypeScript

목록 보기
9/11
post-thumbnail

자바스크립트의 객체

자바스크립트에서 객체란 키/값 쌍의 모음이며, 값은 어떤 것이든 될 수 있습니다.
자바스크립트 엔진에서 object의 키는 string, symbol 타입만 가능합니다.
배열에서도 number 타입의 key로 접근이 불가능합니다.

하지만, 자바스크립트 엔진에서 자동으로 형변환이 되기에 number 타입의 키로도 접근이 가능합니다

array[0] -> array['0'] // 내부적으로 형변환이 됩니다.

const arr = [1, 2, 3]
console.log(Object.keys(arr)) // ['0', '1', '2']

인덱싱은 number 를 사용하지만 실제 배열의 key는 string 입니다.

타입스크립트는 일관성을 위해 number 타입의 키를 허용합니다.

인덱스 시그니처를 만들 때, 키 타입이 number 라면 거의 대부분 경우 이미 정의된 Array튜플 , 또는 ArrayLike 타입을 통해 사용할 수 있습니다.
number 인덱스 시그니처를 위해 새롭게 타입을 만들 일이 거의 없다는 뜻입니다.

✅ 인덱스 시그니처에 number 를 사용하기 보다는 Array튜플 , 또는 ArrayLike 타입을 사용하는 것이 좋습니다.

function checkedAccess<T>(xs: ArrayLike<T>, i: number): T {
  if ( i < xs.length) {
  	return xs[i];
  }
  throw new Error('배열의 ...')
}
profile
혼신의 힘을 다하다 🤷‍♂️

0개의 댓글