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

home2 게시판 JavaScript, TS 게시판 클래스에서 타입 인터페이스 사용 방법 문의

클래스에서 타입 인터페이스 사용 방법 문의

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

    이성수
    참가자
    class 만들때 타입 지정하는 부분을 듣고 있습니다. 
    
    여기서 2번 문제를 풀 때
    
    Q2. 파라미터를 포함하는 Word라는 이름의 클래스 생성
    1. object 만들 때 new Word() 소괄호 안에 숫자 혹은 문자를 입력하면
    2. 숫자는 전부 object 안의  num 속성 안에 array 형태로 저장되고
    3. 문자는 전부 object 안의 str 속성 안에 array 형태로 저장되는 class
    4. class 만들 때 넣을 수 있는 숫자와 문자 갯수는 일단 제한은 없음. 타입지정 필수
    
    
    class Word {
        num :number[]; str :string[];
        constructor(...params :(string | number)[]) {
            let nums :number[] = [];
            let strs :string[] = [];
            params.forEach(item => {
                if (typeof item === 'string') {
                    strs.push(item);
                } else {
                    nums.push(item);
                }
            })
            this.num = nums;
            this.str = strs;
        }
    }
    let obj = new Word('kim', 22, 'Lee', 28);
    console.log(obj);
    
    Word라는 클래스에서 필드로 지정해둔 num과 str이라는 변수의 타입을 인터페이스 형식으로 지정해서 받는 방법은 없을까요? 
    하나하나 지정해주는게 아니라 인터페이스에 하나로 싹 다 묶어버리고 싶은데 방법이 없을까요?
    #53281

    이성수
    참가자
    아 글 쓰자마다 implement로 인터페이스 받아와지는 걸 확인했네요... 죄송합니당 ㅜ
    
    보통 implement로 타입 인터페이스를 클래스에 받아와서 사용하는게 맞나요?
    #53283

    이성수
    참가자
    한가지만 더 질문드리고 싶은데 
    
    
    interface WordArrType {
        num: number[];
        str: string[];
    }
    class Word implements WordArrType{
        num = [];
        str = [];
        constructor(...params: (string | number)[]) {
            params.forEach(item => {
                if (typeof item === 'string') {
                    this.str.push(item) // TS2345: Argument of type 'string' is not assignable to parameter of type 'never'.
                } else {
                    this.num.push(item); // TS2345: Argument of type 'number' is not assignable to parameter of type 'never'.
                }
            })
        }
    }
    let obj = new Word('kim', 22, 'Lee', 28);
    console.log(obj);
    
    코드를 좀 더 나은 방향으로 고쳐보려고 건드렸는데 저렇게 str과 num 필드에 never 타입이 할당되어 버립니다. 
    implement를 통해 인터페이스의 타입들을 str, num 필드가 상속받았으니 당연히 string[] 타입과 number[] 타입이 할당될 줄 알았는데 조금 혼란스럽네요
    
    왜 이런지 이유를 알 수 있을까요?
    #53315

    codingapple
    키 마스터
    implements는 타입힌트지 타입을 그걸로 변경해주지는 않아서그런듯요
    빈 array 만들면 never가 할당됩니다
4 글 보임 - 1 에서 4 까지 (총 4 중에서)
  • 답변은 로그인 후 가능합니다.

About

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

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

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