Advanced TypeScript skills learned through hands-on practice
Inferring Key Types of Object Arguments
Record의 제네릭은 자동적으로 바뀌나요?
Record에서 TKey를 추론할때, “a” 따로 “b” 따로 추론하는게 신기합니다.
const typedObjectKeys = <T extends string>(obj: Record<T,any>):Array<T> => {
return Object.keys(obj) as Array<T>;
};저는는 당연히 하나안에 있어서(반복문이나 그런거 없어서) TKey는 단일한 타입일거라고 생각했다.
Answer 2
0
안녕하세요, 인프런 AI 인턴입니다.
yje10007님, Record 타입에서 TKey를 추론하는 과정은 자바스크립트의 동작 방식과 타입스크립트의 타입 추론 방식에 따라 이루어집니다.
타입스크립트의 Record<TKey, TValue> 유틸리티 타입은 TKey를 키로 하고 TValue를 값으로 하는 객체 타입을 나타냅니다. 여기서 TKey는 키값의 타입으로, 제네릭은 다양한 타입을 유연하게 처리할 수 있도록 해줄 때 사용합니다.
제네릭 함수 typedObjectKeys에서 obj의 타입을 Record<T, any>로 지정하셨는데, 이는 obj가 어떠한 문자열이든 키로 가질 수 있고, 그에 해당하는 값의 타입이 any임을 의미합니다. Object.keys(obj)는 객체의 모든 키를 문자열 배열로 반환하는 자바스크립트 내장 메서드입니다. 타입스크립트에서는 이 반환값을 string[]으로 추론하지만, 실제로는 T[]와 동일합니다. 그리고 as Array<T>를 이용해서 이를 명시적으로 T[] 타입으로 단언합니다.
TKey는 함수가 호출될 때 제공된 obj 객체에 따라 추론되며, 정말 다양한 문자열 리터럴의 유니온(합집합)으로 처리될 수 있습니다. 예를 들어, obj가 { a: 1, b: 2 }로 제공되었다면 T는 "a" | "b"로 추론될 것입니다. 이러한 과정은 타입스크립트가 제공하는 조건부 타입과 타입 추론 기능을 통해 자동적으로 수행됩니다.
타입스크립트의 타입 추론은 매우 강력하여, 개발자가 명시적으로 제네릭 타입을 선언하지 않더라도 적절한 상황에 맞는 타입을 유추해 낼 수 있습니다.
이게 된다는걸 어떻게 판단할 수 있나요?
0
59
2
연습문제 강의 확인 부탁드립니다.
0
80
2
object key 질문드립니다.
0
66
1
행운 닉네임 등록부탁드립니다!
0
136
2
각 강의에 대한 설명 링크 404에러
0
68
2
행운문제 닉네임 등록 요청드립니다
0
63
2
블로그 링크 문제
1
122
1
제네릭과 사용자 정의 타입 가드에 관한 질문
1
168
1
제네릭 타입 제한을 하는것이 어떤 장점이 있을까요 ?
1
140
1
행운문제 닉네임 등록 신청합니다!
0
110
2
행운문제 테스트 유저 이름 입력 요청
0
128
2
행운문제 닉네임 입력 요청
1
157
2
행운문제 테스트 유저 이름 입력 요청
1
139
2
설명 블로그에 대한 질문
2
128
3
행운동전!
0
115
2
행운문제 테스트 유저 이름 입력 요청
0
122
1
행운 테스트 문제 400 에러
0
177
2
행운 테스트 문제 (존재하지 않는 유저입니다.)
1
203
2
행운테스트 동전이용!!
0
209
2
연습문제 링크 이슈
2
222
3
화살표 함수와 일반 함수의 매개변수 추론 관련
1
305
2
제네릭을 활용해서 정답을 맞춰보았습니다!
1
329
2
cache 강의 질문
1
209
1
extends와 = 의 차이는 무엇인가요?
1
221
1

