(진행중인 프로젝트의 인터페이스인데 그냥 써본다.)
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를 찾는게 가능해진다.
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
}