Item 54 객체를 순회하는 노하우

Key Points

다음 코드는 실행은 잘 되지만 편집기에서 오류가 발생한다.

const obj = {
  one: 'uno',
  two: 'dos',
  three: 'tres',
}
for (const k in obj) {
  const v = obj[k]
         // ~~~~~~ obj에 인덱스 시그니처가 없기 때문에 엘리먼트는 암시적으로 'any' 타입
}

k의 타입을 다음과 같이 명시해주면 사라진다.

const obj = {
  one: 'uno',
  two: 'dos',
  three: 'tres',
}
let k: keyof typeof obj // "one" | "two" | "three"
for (k in obj) {
  const v = obj[k]      // OK
}

골치 아픈 타입 문제 없이 객체의 키와 값을 순회하고 싶으면 다음과 같이 Object.entries를 사용하면 된다.

function foo(abc: ABC) {
  for (const [k, v] of Object.entries(abc)) {
    k // string
    v // any
  }
} 

Summary

  • 객체를 순회할 때, 키가 어떤 타입인지 정확히 파악하고 있다면 let k: keyof Tfor-in 루프를 사용하자. 함수의 매개변수로 쓰이는 객체에는 추가적인 키가 존재할 수 있다는 점을 명심하자.

  • 객체를 순회하며 키와 값을 얻는 가장 일반적인 방법은 Object.entries를 사용하는 것이다.

Last updated