객체의 속성과 타입을 정의

interface Student{
    korean: number;
    english: number;
    math: number;
}

 

 

이제 Student 를 이용해서 객체(object)를 생성

const joey: Student ={
    korean: 90,
    english: 100,
    math: 80,
}

 

90점 이상인 과목이 몇개 인지 확인

const countOverNinetyScore = Object.values(joey).filter(score => score>90).length;

 

이제부터 오류가 시작된다....

에러 1. Object.values 는 "es2017" 이후 부터 적용되는 문법이여서 에러 발생

 

keys 를 사용하여 변경!

const countOverNinetyScore = Object.keys(joey).filter(key => joey[key] >= 90).length;

 

에러 2. key 가 뭔데??? any 타입일 수도 있는데  막쓰면 안된다는 내용의 에러발생

TSError: ⨯ Unable to compile TypeScript:
- error TS7053: Element implicitly has an 'any' type because expression of type 'string' can't be used to index type 'Student'.
No index signature with a parameter of type 'string' was found on type 'Student'.
       joey [key]>= 90).length

..... 

 

구글링을 통하여 해결법 발견

const countOverNinetyScore = Object.keys(joey).filter(key 
					=> joey[key as keyof Student]>= 90).length

 

위 코드에서 "joey[ key as keyof Student]" 을 사용하는 이유
key가 Student 인터페이스에서 유효한 키임을 TypeScript 컴파일러에 알려줘야 하기 때문이다.
그냥 joey[key] 를 사용하면 TypeScript 컴파일러는 key 가 Student 인터페이스의
모든 가능한 키 중 하나라는 것을 보장할 수 없으므로 타입 체킹 오류를 발생시킨다.

'프로그래밍 > TypeScript' 카테고리의 다른 글

[ TS ] Promise<void> 의미  (0) 2024.05.07
[ TS ] 상속 : extends, super(),  (0) 2024.05.05
[TS] 유틸리티 타입 (Utility Types): Keyof, Partial  (0) 2024.03.08
[TS] 제네릭 ( Generics )  (0) 2024.03.08
[ TS ] 추상 class  (0) 2024.03.08

+ Recent posts