[TypeScript] 객체에 키 값으로 접근해 값 추출할 때 에러 발생 해결

이나원·2026년 3월 9일

트러블슈팅

목록 보기
13/13

에러 문구
Element implicitly has an 'any' type because expression of type 'number' can't be used to index type

const USER_LOCK_STATE = {
  0: {
    label: '라벨 내용 0',
    value: '0',
  },
  1: {
    label: '라벨 내용 1',
    value: '1',
  },
  2: {
    label: '라벨 내용 2',
    value: '2',
  },
  3: {
    label: '라벨 내용 3',
    value: '3',
  },
};

// 에러 발생!!!
const getLockStateFormat = (lockState: number) => `${lockState}: ${USER_LOCK_STATE[lockState].label}`;
  • 위와 같은 상황에서 객체의 키 값을 이용해 라벨 값을 얻어내고자 하면 에러가 발생한다.

  • 이유는 바로 객체를 선언할 때 타입을 제대로 작성해주지 않았기 때문이었다.

const USER_LOCK_STATE : {[key: number] : {label: string; value: string} } = {
  0: {
    label: '라벨 내용 0',
    value: '0',
  },
  1: {
    label: '라벨 내용 1',
    value: '1',
  },
  2: {
    label: '라벨 내용 2',
    value: '2',
  },
  3: {
    label: '라벨 내용 3',
    value: '3',
  },
};

// 정상 작동!!!
const getLockStateFormat = (lockState: number) => `${lockState}: ${USER_LOCK_STATE[lockState].label}`;
  • 키 값에 대한 타입과 해당 키 값을 이용해 얻을 수 있는 데이터까지 타입을 명확히 정의 해주면 에러가 말끔히 해결되고 정상적으로 함수가 동작함을 확인할 수 있다!

도움 받은 글
https://stackoverflow.com/questions/57086672/element-implicitly-has-an-any-type-because-expression-of-type-string-cant-b

profile
프론트엔드 개발자로 재직 하면서 겪은 개발 과정을 기록하는 곳입니다 🙌

0개의 댓글