책/이펙티브 타입스크립트

[TS실생활 54] 객체 순회

atmosg 2022. 8. 2. 16:13

객체를 순회하려고 시도하면 생각보다 타입 오류 때문에 빡칠 일이 많다. 이를 비교적 쉽게 회피하는 법을 알아보자.

 

1. keyof T

객체의 프로퍼티 키가 정확히 어떤 타입인지 알고 있으면 써도 좋다. 다만, 구조적 타이핑을 생각하면 함수의 매개변수로 추가적인 키가 존재할 수 있다는 점만 명심하자.

 

2. Object.entries

타입 문제 없이 객체의 키와 값을 순회할 수 있다. ES2017(ES8) 설정을 추가해야 되는 게 문제라면 문제인데, 제일 간단하고 편리한 방법이다.

 

const obj = {
  one: '원',
  two: '투',
  three: '쓰리',
};


1) 이렇게 하면 안되지롱
for (const key in obj) {
  // key는 string으로 추론된다
  // obj는 one two three 세 개의 키만 갖는다
  const value = obj[key];
      // ~~ obj에 인덱스 시그니처가 없기 때문에
      // 엘리먼트는 암시적으로 'any' 타입인데요?
}

2) keyof
// 일단 obj 자체는 JS객체니까 타입을 긁어오기 위해 typeof
// typeof로 긁어온 타입의 프로퍼티 키들을 긁어올 keyof
// 결과적으로 key의 타입은 "one", "two", "three"
let key: keyof typeof obj 
for (key in obj) {
  // 이제 잘 돌아간다
  const value = obj[key];
}

3) Object.entires
// Try changing the 'lib' compiler option to 'es2017' or later.
for (const [key, value] of Object.entries(obj)) {
  // 제일 간단
}