: 다른 타입의 특정 속성이 가지는 타입을 조회하기 위해 사용.
( 배열의 요소 타입을 조회 )
const PromotionList = [
{ type: "product", name: "chicken" },
{ type: "product", name: "pizza" },
{ type: "card", name: "cheer-up" },
];
type Elementof<T>= typeof T[number];
// type PromotionItemType = { type: string; name: string }
type PromotionItemType = ElementOf‹PromotionList>;
: PromotionList 배열을 정의하고, Elementof 타입을 사용하여 배열의 항목 타입을 추출
: ElementOf는 잘못된 표기이고, 정확한 표기는 Elementof입니다.
-> 이를 통해 배열이나 튜플의 각 요소 타입을 추출가능
PromotionItemType
[number]
: 배열의 각 요소 타입을 추출.
type Elementof<T> = typeof T[number];
Elementof<PromotionList>
: PromotionList 배열의 요소 타입을 추출하고, PromotionItemType에 PromotionList의 각 객체 타입이 대입됨.
PromotionList의 타입이 배열 리터럴이므로, typeof PromotionList[number]로 배열의 요소 타입을 정확히 추출할 수 있음.
function hayoung<T>(value: T): T {
return value;
}
<T>
: 함수 이름 옆의 <T>
는 제네릭 타입 변수를 선언하는 부분
이 T는 이 함수에서 사용할 타입의 "이름"
예: <T>
→ "나는 T라는 타입 변수를 사용할 거야!"
value: T
: 여기의 T는 매개변수 value의 타입
value는 제네릭 타입 T로 지정된 값.
예: value: T
→ "value의 타입은 내가 호출 시 결정할 T야."
): T
: 함수의 반환 타입
여기의 T는 함수가 반환하는 값의 타입
예: ): T
→ "이 함수는 호출 시 결정된 T 타입의 값을 반환할 거야."
-> value는 어떤 타입이든 될 수 있음.
function getFirstElement<T>(arr: T[]): T | undefined {
return arr[0];
}
const numberArray = [1, 2, 3];
console.log(getFirstElement(numberArray)); // 1
<T>
: 제네릭 타입 변수를 선언하는 부분
= 함수가 호출될 때 타입을 추론하거나 명시적으로 지정할 수 있도록 준비하는 단계.
T
: 함수 선언 시 <T>
를 통해 정의된 제네릭 타입
= 함수 내부에서 사용하는 타입으로, 배열의 요소 타입을 의미. = 배열의 타입을 추론
( T
라는 이름을 사용하여 이 함수가 임의의 타입을 처리할 수 있다고 선언하는 것 )
`arr: T[]`
: 매개변수 arr는 요소 타입명시 = T인 배열임을 나타냄.
- arr는 타입이 T[]인 매개변수라는 뜻
- T[]는 "요소 타입이 T인 배열"을 의미
예를 들어:
arr: number[] → arr는 숫자 배열.
arr: string[] → arr는 문자열 배열.
T | undefined
: 반환 값은 요소 타입 T 또는 undefined일 수 있음numberArray의 타입을 추론 -> 처리.
: numberArray의 타입은 number[]이므로, T는 number로 추론