inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

한 입 크기로 잘라먹는 타입스크립트(TypeScript)

맵드 타입 기반의 유틸리티 타입 2 - Pick, Omit, Record

pick 타입 구현 질문

해결된 질문

64

green

작성한 질문수 11

0

interface Post {
  title: string;
  tags: string[];
  content: string;
  thumbnailURL?: string;
}

type Pick<T, K extends keyof T> = {
  [key in K]: T[key];
};

const legacyPost: Pick<Post, "title" | "content"> = {
  title: "옛날 글",
  content: "옛날 컨텐츠",
};

 

현재 pick 부분을 공부하고 있고, 가운데 있는 코드가 직접 구현하는 코드인데요

그럼 밑에 const legacyPost ~~ 이하는 없다고 생각하고 가운데 구현 코드를 작성하는거 아닌가요?

그럼 가운데 구현코드 T, K 타입변수에 Post나 프로퍼티가 어떻게 들어오게 되는건가요...?

typescript

답변 2

0

이정환 Winterlood

안녕하세요 이정환입니다.

질문의 요점이 "Pick 타입이 정의되지 않은 상태에서 어떻게 legacyPost 변수의 타입을 Pick 타입으로 정의할 수 있느냐" 일까요?

답변드리자면 Pick 타입은 타입스크립트의 유틸리티 타입이므로 우리가 직접 구현하지 않아도 기본적으로 제공됩니다. 따라서 구현 이전에도 이용할 수 있는 것이죠

 

질문이 정확히 이해되지 않아 일단 이렇게 이해하고 답변 드리겠습니다.

혹시 아니라면 답글 남겨주세요

1

green

아아 저는 type pick도 유틸리티 타입으로 생각해서
그럼 밑에 const lagacyPost에 정의한 pick은 없다고 생각하고 강의를 들어야 하는건가?라고 생각했었는데

그러면 type pick에 Post나 값이 어떻게 들어오는건지 몰랐던건데
하루가 지나고 나니 갑자기 이해가 되었네요...하핳,,

제가 선생님도 이해하게끔 설명했는지 모르겠지만 아무튼 전 해결되었습니다.😂

감사합니다!ㅎㅎ

0

이정환 Winterlood

앗! ㅋㅋ 이해되셨다니 다행입니다! 혹시 더 궁금하신 점 있으시면 언제든 질문주세요 😀

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. green님.

TypeScript에서 Pick 유틸리티 타입은 주어진 인터페이스에서 일부 프로퍼티만 선택하여 새 타입을 만드는 방법입니다. 질문 주신 예제 코드에서는 Pick을 직접 구현하여 사용하고 있습니다. 해당 구현 부분에 대해 좀 더 살펴보겠습니다.

type Pick<T, K extends keyof T> 부분은 제네릭 타입으로, T는 인터페이스(또는 객체 타입 전체)를, KT로부터 선택할 프로퍼티 키들을 나타냅니다. K extends keyof TK가 반드시 T의 키중 하나여야 한다는 제약을 뜻합니다.

[key in K]: T[key]는 주어진 키 K에 대해 T에서 해당 키의 타입을 가져와 새 타입을 구성합니다. 따라서 Pick<Post, "title" | "content">Post 인터페이스에서 "title""content"만 포함된 새로운 타입을 생성합니다.

구현된 Pick 타입은 TypeScript의 유틸리티 타입 중 하나로, 실제로 TypeScript에 내장되어 제공되는 기능입니다. 이 기능을 직접 구현하면서 내부 동작 방식을 이해하는 데 도움이 됩니다.

관련 유사 질문:

위의 링크들을 통해 TypeScript의 제네릭 및 Pick 타입에 대한 추가적인 설명과 예시를 확인해보시기 바랍니다. 질문 주신 부분이 이해하는 데 도움이 되었기를 바랍니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

핸드북 light/dark mode 관련 이슈가 있는 것 같습니다.

0

35

1

제네릭 클래스 핸드북 페이지가 undefined라고 나옵니다.

0

33

2

적절한 타입 찾기 React.ChangeEvent<HTMLInputElemen>

0

41

2

outDir 옵션 추가 후 컴파일 오류 질문

0

94

1

호출 시그니처 질문

0

75

2

서로소 유니언 타입이 discriminated union과 동의어 인가요?

0

88

2

조건부타입소개 중 함수오버로딩 활용 시 인수의타입과 함수의 반환값의 타입이 깨지는 문제

0

77

1

할인쿠폰 관련하여

0

174

2

프론트엔드에서의 인터페이스활용

0

107

2

안녕하세요 이정환님!

0

99

1

Node.js 설치에 관한 질문입니다.

0

87

2

함수 타입 호출 시그니처

0

65

1

35강. 모듈 보강은 라이브러리 파일을 직접 편집해야 하나요?

0

71

2

인터페이스 문법이 있는데 타입 별칭 문법은 왜 있나요?

0

125

4

마우스 호버 시 정보

0

103

2

vite으로 리액트 빌드하기를 업데이트해주세요.

1

93

2

타입가드를 만들어 사용하는 이유가 궁금합니다.

0

93

2

섹션 12가 너무 어려운데... 정상이겠죠..?

0

143

2

선생님.. 알고리즘도 강의해주시면안되나요

0

107

2

선생님은 어떻게 이런걸 아세요?

0

138

1

type: module

0

108

2

7:17초 업캐스팅 질문이있습니다!

0

86

1

슈퍼타입질문

1

75

2

프로젝트 설치

0

119

2