[Typescript] Object Index Signature에서 typeguard가 안먹혀...
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
}
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
}
Author And Source
이 문제에 관하여([Typescript] Object Index Signature에서 typeguard가 안먹혀...), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@gomiseki/Typescript-Object-Index-Signature에서-typeguard가-안먹혀저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)