inflearn logo
강의

Course

Instructor

Advanced TypeScript skills learned through hands-on practice

Inferring Key Types of Object Arguments

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

Resolved

377

yje10007

3 asked

0

Record에서 TKey를 추론할때, “a” 따로 “b” 따로 추론하는게 신기합니다.


const typedObjectKeys = <T extends string>(obj: Record<T,any>):Array<T> => {
    return  Object.keys(obj) as Array<T>;
};

저는는 당연히 하나안에 있어서(반복문이나 그런거 없어서) TKey는 단일한 타입일거라고 생각했다.

typescript

Answer 2

0

aftercamp

네 생각보다 타입스크립트가 똑똑하게 타입 추론을 해줍니다 😅

0

communityai8509

안녕하세요, 인프런 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

58

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