inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Các kỹ năng TypeScript nâng cao được học thông qua thực hành thực hành

Hạn chế loại chung

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

140

siwon98986203

2 câu hỏi đã được viết

1

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

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

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

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

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

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

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

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

typescript

Câu trả lời 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

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

158

2

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

1

140

2

설명 블로그에 대한 질문

2

129

3

행운동전!

0

115

2

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

0

122

1

행운 테스트 문제 400 에러

0

177

2

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

1

203

2

행운테스트 동전이용!!

0

209

2

연습문제 링크 이슈

2

223

3

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

1

308

2

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

1

332

2

cache 강의 질문

1

211

1

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

0

380

2

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

1

222

1