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

Suy ra loại đối số chính của đối số

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

Đã giải quyết

379

yje10007

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

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

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

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

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

1

140

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

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

1

222

1