제네릭 타입 제한을 하는것이 어떤 장점이 있을까요 ?
140
작성한 질문수 2
안녕하세요, 항상 좋은 강의 감사드립니다.
제네릭 타입 제한 강의 내용에서 궁금한 점이 있습니다.
제네릭 타입 제한을 하기 위해
const shouldBeRecordTypeSolution = <T extends string>(t: T) => obj[t];와 같은 형태로 T안에 들어올 수 있는 타입을 string으로 제한하는데요,
어차피 param의 타입을 특정 타입으로 제한할거면 아래와 같이 타입을 바로 정의해도 되는것 아닐까요?
const shouldBeRecordTypeSolution2 = (t: string) => obj[t];
param에 타입을 특정 타입으로 제한해야 하는 경우,굳이 제네릭 타입 제한을 사용하는 이유가 특별히 있을까요 ? 사용 시 차이점을 잘 모르겠어서 여쭤봅니다 ㅜㅜ
답변 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





