inflearn logo
강의

Course

Instructor

Advanced TypeScript skills learned through hands-on practice

Generic type restrictions

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

150

siwon98986203

2 asked

1

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

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

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

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

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

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

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

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

typescript

Answer 1

0

aftercamp

안녕하세요 시원님 😃

올려주신 예시에선 사실 제한하는 이유를 찾기란 쉽지 않습니다.
아래의 예제를 보시면 조금 사용하는 이유를 찾을 수 있지 않을까 생각하는데, 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

79

2

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

0

101

2

object key 질문드립니다.

0

87

1

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

0

152

2

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

0

87

2

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

0

77

2

블로그 링크 문제

1

136

1

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

1

178

1

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

0

122

2

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

0

134

2

행운문제 닉네임 입력 요청

1

162

2

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

1

149

2

설명 블로그에 대한 질문

2

141

3

행운동전!

0

121

2

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

0

127

1

행운 테스트 문제 400 에러

0

184

2

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

1

209

2

행운테스트 동전이용!!

0

212

2

연습문제 링크 이슈

2

228

3

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

1

316

2

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

1

338

2

cache 강의 질문

1

215

1

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

0

385

2

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

1

231

1