객체의 속성과 타입을 정의
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 |