강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

yje10007님의 프로필 이미지
yje10007

작성한 질문수

실전 연습으로 익히는 고급 타입스크립트 기술

Object Argument의 Key 타입 추론하기

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

해결된 질문

작성

·

351

0

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


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

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

답변 2

0

애프터캠프님의 프로필 이미지
애프터캠프
지식공유자

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

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"로 추론될 것입니다. 이러한 과정은 타입스크립트가 제공하는 조건부 타입과 타입 추론 기능을 통해 자동적으로 수행됩니다.

타입스크립트의 타입 추론은 매우 강력하여, 개발자가 명시적으로 제네릭 타입을 선언하지 않더라도 적절한 상황에 맞는 타입을 유추해 낼 수 있습니다.

yje10007님의 프로필 이미지
yje10007

작성한 질문수

질문하기