[Typescript] Object Index Signature에서 typeguard가 안먹혀...

4636 단어 errortypescripterror

1. typescript에서 Object Index Signature


 Javascript에서는 원하는 프로퍼티에 접근하기 위해 object[property]식을 아무 처리 없이 사용하는게 가능하다. Typescript에서는 좀 다른데, object type에 index signature를 사용하겠다고 명시해야 한다.

(진행중인 프로젝트의 인터페이스인데 그냥 써본다.)

interface algoScoreType{
    [index:string]:number|essentialProps,
    deathPerMatch:number,
    KDAPerMatch:number,
    winRate:number,
    maxDeathPerCount:number,
    foreignLanguageRatio:number,
    positionRatio:number,
    champUseRatio:number,
    userLevel:number,
    isPrevSeason:number,
    essential?:essentialProps
}

 상기한 코드의 맨 윗 부분이 그것. 저 코드 한줄로 object[index] 식에서 아래의 property를 찾는게 가능해진다.




2. Typeguard가 안먹혀...


 위의 타입을 가진 객체를 반복문에서 호출해 보려했다.
let sum = 0;
for(const data in score){
  if(typeof score[data]=='number')sum += temp
}

 value 중 number인 애들만 골라서 더해주겠다는 건데, index signature의 유니온 타입이 typeof로 걸러지질 않아 오류가 생겼다.

stack overflow 검색 결과, typescript에서 오래된 오류지만 딱히 개선하지 않은 듯 하다.

 링크에서 제시한 방법은 그냥 index signature로 호출된 데이터를 다른 변수에 한번 더 할당하는 것인데, 위의 경우 다음과 같이 수정해볼 수 있으며, 이후 유사한 에러 발생 시 선제적으로 시도해볼 수 있겠다.

let sum = 0;
for(const data in score){
  const temp = score[data]
  if(typeof temp=='number')sum += temp
}

좋은 웹페이지 즐겨찾기