자바스크립트에서 객체란 키/값 쌍의 모음이며, 값은 어떤 것이든 될 수 있습니다.
자바스크립트 엔진에서 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('배열의 ...')
}