개발 잘해지는 닉네임
298
2021-08-13 17:17:59
12
216

typescript 여러 요소중 하나만 받도록 하는거 어떻게 만들까요?



const func = ({a,b,c}: {a:number, b:number, c:number}) => {
   ...
}

과 같은 코드가 있을때 매개변수 a,b,c중 한개만 받을수 있도록 만들려면 어떻게 해야할까요?

아래와 같이 동작했으면 좋겠어요

func({ a:1 }) // 매개변수가 1개니까 가능
func({ c:1 }) // 매개변수가 1개니까 가능
func({ a:1, b:2 }) // 매개변수가 2개니까 불가능
func({}) // 매개변수가 0개니까 불가능


고수님들 도와주세요 ㅠㅠ

이런걸 구현하는 개념이름이 뭔지 검색할수있도록 알려주셔도 감사합니다!

0
  • 답변 12

  • 원숭이부대
    1k
    2021-08-13 17:21:20 작성 2021-08-13 17:28:56 수정됨

    타입스크립트를 안해봐서 모르겠는데, 

    자바에서의 오버로딩을 적용하면 될거같기는 한데요


    타입스크립트에서도 지원하는지는 모르겠네요



    /// 쓰고보니 뇌절답변이네요 


    -1
  • HJOW
    3k
    2021-08-13 17:21:37

    https://velog.io/@sji7532/TypeScript-%ED%95%A8%EC%88%98%EC%9D%98-Type-%EC%84%A0%ED%83%9D%EC%A0%81-%EB%A7%A4%EA%B0%9C%EB%B3%80%EC%88%98-%EA%B7%B8%EB%A6%AC%EA%B3%A0-%EA%B8%B0%EB%B3%B8-%EB%A7%A4%EA%B0%9C%EB%B3%80%EC%88%98


    "선택적 매개변수" 라고 합니다. 물음표 기호를 사용합니다.

  • 개발 잘해지는 닉네임
    298
    2021-08-13 17:26:01

    HJOW 님 답변감사합니다. 그런데 해당 문법으로는 위의 예시를 못만들겠어요 ㅠㅠ 선택적 매개변수를 이용하면

    a / a,b / a,b,c 를 받는 함수를 만들수 있지만 c만 받는건 못만드는거같아요

  • 개발 잘해지는 닉네임
    298
    2021-08-13 17:27:29

    원숭이부대 자바는 오버로딩으로 함수 3개 만들면 되죠! 그립읍니다 자바

  • HJOW
    3k
    2021-08-13 17:27:55 작성 2021-08-13 17:29:13 수정됨

    개발 잘해지는 닉네임//

    선택적 매개변수는 반드시 뒤쪽에 위치해야 합니다.



    다만 오버로딩은 지원하네요.

    https://velog.io/@ssswon/TypeScript-overLoading

  • HJOW 본문의 예시같은건 불가능한걸까요?ㅠ

    -1
  • 포기해..
    1k
    2021-08-13 17:38:06
    이야.. 이건 뭐 그냥 짜달라는 소리네
  • 페코옹
    1k
    2021-08-13 17:47:42
    매개 변수를 3개 받을 수 있는데 1개 받을 수 있기 한다라..
    이건 타입스크립트 문제가 아니라 함수 자체를 잘못짠거 같은데요
  • 개발 잘해지는 닉네임
    298
    2021-08-13 17:58:20

    포기해.. 아뇨; 구현하는 개념이 뭔지 링크줘도 되요; 본문읽어요

    페코옹 어느정도 잘못만든게 맞는거 같은데, 사용하려는 api가 셋중하나를 받도록 만들어져 있어서 있는 그대로 구현하고 싶어요

    -1
  • HJOW
    3k
    2021-08-13 18:04:09

    만약 셋 중 하나, 혹은 둘을 안넣어도 되는 기능의 메소드인데 그걸 받지 못한다고 하면

    그건 그 API가 잘못 만들어져 있거나, 그걸 대체하는 메소드가 따로 있겠죠.


    어쨌든 불가능함요

  • star16m
    788
    2021-08-13 23:04:39

    음.. 모바일이라 테스트는 할수 없지만

    object 정의라서 파라메터는 그냥 하나입니다

    a,b,c 값을 가지는 타입 하나.

    Object.values(paramObj).length === 1

    으로 개수판단은 될거 같습니다

    그게 아니라 지정한 키가 필요하시면

    Object.keys(paramObj) 을 잘 쓰시면 될겁니다


  • 개발 잘해지는 닉네임
    298
    2021-08-17 09:56:09

    star16m 님 답변 감사합니다. 근데 제가 질문을 모호하게 올렸네요ㅠ 런타임에서 잡히는거 말고 타입스크립트로 바로 잡는걸 질문한거 입니당..

  • 로그인을 하시면 답변을 등록할 수 있습니다.