inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

실전 연습으로 익히는 고급 타입스크립트 기술

제네릭 타입 제한

제네릭 타입 제한을 하는것이 어떤 장점이 있을까요 ?

140

이시원 Siwon Lee

작성한 질문수 2

1

안녕하세요, 항상 좋은 강의 감사드립니다.

제네릭 타입 제한 강의 내용에서 궁금한 점이 있습니다.

제네릭 타입 제한을 하기 위해

const shouldBeRecordTypeSolution = <T extends string>(t: T) => obj[t];

와 같은 형태로 T안에 들어올 수 있는 타입을 string으로 제한하는데요,

어차피 param의 타입을 특정 타입으로 제한할거면 아래와 같이 타입을 바로 정의해도 되는것 아닐까요?

const shouldBeRecordTypeSolution2 = (t: string) => obj[t];

param에 타입을 특정 타입으로 제한해야 하는 경우,굳이 제네릭 타입 제한을 사용하는 이유가 특별히 있을까요 ? 사용 시 차이점을 잘 모르겠어서 여쭤봅니다 ㅜㅜ

typescript

답변 1

0

애프터캠프

안녕하세요 시원님 😃

올려주신 예시에선 사실 제한하는 이유를 찾기란 쉽지 않습니다.
아래의 예제를 보시면 조금 사용하는 이유를 찾을 수 있지 않을까 생각하는데, obj에서 object의 key들만 접근하고 싶을 때 아래와 같이 코드를 작성할 수 있습니다.

function getValue<T extends string>(key: T, obj: Record<T, number>) {
  return obj[key];
}

const obj = { key1: 1, key2: 2 };

getValue('key1', obj); // 'key1' 타입으로 안전하게 호출 가능
getValue('key3', obj); // 컴파일 에러 (key3는 obj의 키가 아님)

Record의 타입 첫번째 인자는 항상 string | symbol | number 가 와야 하는데요. 이 경우에는 string으로 강제하기 위해 T extends string string 타입으로 제한했습니다.

강의를 조금만 더 들어보시면 제네릭 타입 제한하는 문제들이 있으니 한번 풀어보시면 어느 상황에서 사용할 수 있으신지 깨닫게 되실거에요.

그래도 만약 이해가 되지 않으신다면 질문 남겨주세요!


이게 된다는걸 어떻게 판단할 수 있나요?

0

60

2

연습문제 강의 확인 부탁드립니다.

0

80

2

object key 질문드립니다.

0

66

1

행운 닉네임 등록부탁드립니다!

0

136

2

각 강의에 대한 설명 링크 404에러

0

69

2

행운문제 닉네임 등록 요청드립니다

0

64

2

블로그 링크 문제

1

122

1

제네릭과 사용자 정의 타입 가드에 관한 질문

1

168

1

행운문제 닉네임 등록 신청합니다!

0

111

2

행운문제 테스트 유저 이름 입력 요청

0

129

2

행운문제 닉네임 입력 요청

1

157

2

행운문제 테스트 유저 이름 입력 요청

1

140

2

설명 블로그에 대한 질문

2

128

3

행운동전!

0

115

2

행운문제 테스트 유저 이름 입력 요청

0

122

1

행운 테스트 문제 400 에러

0

177

2

행운 테스트 문제 (존재하지 않는 유저입니다.)

1

203

2

행운테스트 동전이용!!

0

209

2

연습문제 링크 이슈

2

222

3

화살표 함수와 일반 함수의 매개변수 추론 관련

1

306

2

제네릭을 활용해서 정답을 맞춰보았습니다!

1

330

2

cache 강의 질문

1

211

1

Record의 제네릭은 자동적으로 바뀌나요?

0

378

2

extends와 = 의 차이는 무엇인가요?

1

221

1