안녕하세요. 선생님, 타입스크립트 Narrowing 숙제 2번과 관련해서 궁금한 점이 생겨 문의드립니다.
선생님께서 아래처럼 함수를 실행했을때 마지막에 hello를 넣어도 타입에러가 나면 안된다고 하셨는데,
만들함수( { subject : 'math' } ) //이 경우 'math'를 return
만들함수( { subject : ['science', 'art', 'korean'] } ) //이 경우 'korean'을 return
만들함수( { hello : 'hi' } ) //이 경우 타입에러 나면 됩니다
선생님께서 써주신 아래 답을 넣으면 마지막 3번째 문장에서 에러가 납니다.
그래서 저는 다음과 같이 코드를 짰는데요.
function findLastClass(data: object) {
for(let val in data){
if (typeof data[val] === "string") {
return data[val];
} else {
let count: number = data[val].length - 1;
return data[val][count];
}
}
}
let teacher1 = { subject: "math" };
let teacher2 = { subject: ["science", "english"] };
let teacher3 = { subject: ["science", "art", "korean"] };
console.log(findLastClass(teacher1));
console.log(findLastClass(teacher2));
console.log(findLastClass(teacher3));
console.log(findLastClass({hello: 'hi'}));
동작은 제대로 되나 여기서 data[val]부분에 빨간 밑줄이 쳐지면서 다음과 같은 경고 메세지가 보입니다.
(parameter) data: object
Element implicitly has an 'any' type because expression of type 'string' can't be used to index type '{}'.
No index signature with a parameter of type 'string' was found on type '{}'.ts(7053)
번역을 해보고 검색도 해보았으나, 도저히 해결방법을 모르겠습니다.
3번째 문장이 에러가 나지 않게 제 코드를 어떤식으로 고쳐야 경고 메세지도 보이지 않으면서 코드가 잘 돌아갈까요?
답변 주시면 감사하겠습니다^^