• 로그인
  • 장바구니에 상품이 없습니다.

home2 게시판 JavaScript, TS 게시판 타입스크립트 Narrowing 숙제 2번

타입스크립트 Narrowing 숙제 2번

3 글 보임 - 1 에서 3 까지 (총 3 중에서)
  • 글쓴이
  • #15364

    이세인
    참가자

    안녕하세요. 선생님, 타입스크립트 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번째 문장이 에러가 나지 않게 제 코드를 어떤식으로 고쳐야 경고 메세지도 보이지 않으면서 코드가 잘 돌아갈까요?
    답변 주시면 감사하겠습니다^^

    #15374

    codingapple
    키 마스터

    만들함수( { hello : 'hi' } ) 이 경우에는 타입에러가 안나는게 아니라 에러나게 코드짜시면 됩니다

    함수의 파라미터변수에 타입넣으실 때

    var data: object;

    이런 식으로 타입 넣으셨는데 이럴 경우 {} 이건 맞는데 안에 아무것도 명시되지 않은 object기 때문에

    data['어쩌구'] 이런걸 함부로 할 수 없게 막아주는 에러입니다 

     

    #15392

    이세인
    참가자

    안나면이 아니라 나면 이었네요.

    마치 시험때 틀린인데 맞는 거 고른 느낌이네요 ㅋㅋㅋ

    친절한 설명 감사합니다.

    다음번에는 좀 더 꼼꼼하게 읽어보겠습니다 🙂

3 글 보임 - 1 에서 3 까지 (총 3 중에서)
  • 답변은 로그인 후 가능합니다.

About

현재 월 700명 신규수강중입니다.

  (09:00~20:00) 빠른 상담은 카톡 플러스친구 코딩애플 (링크)
  admin@codingapple.com
  이용약관
ⓒ Codingapple, 강의 예제, 영상 복제 금지
top

© Codingapple, All rights reserved. 슈퍼로켓 에듀케이션 / 서울특별시 강동구 고덕로 19길 30 / 사업자등록번호 : 212-26-14752 온라인 교육학원업 / 통신판매업신고번호 : 제 2017-서울강동-0002 호 / 개인정보관리자 : 박종흠