인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

egpark님의 프로필 이미지
egpark

작성한 질문수

[코드팩토리] [초급] 8시간만에 끝내는 코드팩토리의 Typescript 완전정복 풀코스

Extract Type

type functionOnly = Extract<string| (()=> void), Function> 의 의미

작성

·

90

0

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.

코드팩토리 디스코드

https://links.codefactory.ai


Flutter 강의를 구매하시면 코드팩토리 디스코드 서버 플러터 프리미엄 채널에 들어오실 수 있습니다! 디스코드 서버에 들어오시고 저에게 메세지로 강의를 구매하신 이메일을 보내주시면 프리미엄 채널에 등록해드려요! 프리미엄 채널에 들어오시면 모든 질의응답 최우선으로 답변해드립니다!

안녕하세요, 강의 내용이 참 좋습니다. 많이 배우고 있습니다.

강의 내용 중

type functionOnly = Extract<string| (()=> void), Function>

내용이 있습니다.

결과적으로 functionOnly는 ()=>void 타입입니다.

제 의문은..

type functionOnly = Extract<string| Function, Function>

혹은

type functionOnly = Extract<string| (()=> void), (()=> void)>

가 아닌

type functionOnly = Extract<string| (()=> void), Function>

로 표현하는 이유가 뭘까?

이고, 스스로 답을 찾지 못해 문의를 드리게 됐습니다.

답변 2

0

코드팩토리님의 프로필 이미지
코드팩토리
지식공유자

안녕하세요!

질문을 정확히 이해했는지 잘 모르겠지만 제 생각대로 답변 해보겠습니다.

혹시 잘못 이해했다면 다시 답변 주세요!

 

Function 타입은 모든 함수 타입을 포괄합니다. 예를 들어 () => void, (x: number) => number, (a: string, b: number) => string 등 모든 함수 타입은 Function 타입의 부분 집합입니다. 따라서 Function을 사용하면 더 많은 함수 타입을 포함할 수 있습니다.

 

두번째로 Function을 사용하면 함수의 정확한 타입을 명시할 필요 없이 단지 함수임을 나타낼 수 있습니다. 이는 타입이 복잡해질 때 유용합니다. 예를 들어 정확한 함수 시그니처를 일일이 지정하지 않아도 되므로 더 유연하게 타입을 다룰 수 있습니다.

 

감사합니다!

0

안녕하세요, 인프런 AI 인턴입니다.
egpark님의 질문에 대해 답변드리겠습니다.

type functionOnly = Extract<string| (()=> void), Function>에서 Extract<T, U>는 유틸리티 타입 중 하나로, T 에서 U에 할당 가능한 타입들만 추출하는 역할을 합니다. 즉, 여기서는 string | (() => void) 타입 중 Function 타입에 할당 가능한 타입들을 추출하는데 사용됩니다.

Function 타입은 모든 함수 타입의 상위 타입으로, JavaScript에서 모든 함수가 이 타입의 인스턴스라고 볼 수 있습니다. 반면, (() => void)는 더 구체적인 함수 타입으로 매개변수를 받지 않고 반환값도 없는 함수를 나타냅니다.

  1. type functionOnly = Extract<string| Function, Function>로 표현할 경우, Function은 모든 함수 타입을 포괄하기 때문에 string 타입은 제외되고, Function 자체가 결과 타입이 됩니다. 이는 광범위한 모든 함수 타입을 포함하게 됩니다.

  2. type functionOnly = Extract<string| (()=> void), (()=> void)>로 표현할 경우, 이는 매개변수 없이 반환값도 없는 특정 형태의 함수만을 추출함을 의미합니다. 이 방식은 너무 구체적이며 일반적인 함수 타입 추출에는 적합하지 않을 수 있습니다.

type functionOnly = Extract<string| (()=> void), Function> 방식을 사용하는 이유는, 모든 종류의 함수 타입들 중에서 Function에 할당 가능한 타입, 즉 모든 함수 타입을 추출하되, 가장 기본형인 (() => void) 형태로 한정지어 명시하기 위함입니다. 이렇게 표현하면 string은 제외되고, (() => void)Function 타입에 포함됨으로 인하여 결과적으로 functionOnly 타입은 (() => void)가 됩니다.

이 방식은 타입의 범위를 명확하게 한정짓고자 할 때 유용하며, 특히 TypeScript에서 함수 타입을 다룰 때 다양한 함수 형태 중 원하는 형태의 함수만을 제한하여 사용하고자 할 때 사용됩니다.

egpark님의 프로필 이미지
egpark

작성한 질문수

질문하기