infer란 무엇인가?
infer
키워드는 TypeScript의 조건부 타입(Conditional Types)과 함께 사용되어 특정 타입을 추론할 수 있는 메커니즘을 제공한다. 기본적으로 제네릭 타입에서 특정 부분을 추출하거나 변환할 때 유용하며, 타입스크립트가 타입을 추론하는 과정에서 특정 타입을 변수처럼 사용할 수 있다.
type Example<T> = T extends infer U ? U : never;
여기서 T extends infer U
는 T
타입을 U
라는 이름으로 추론하겠다는 의미이다. 이 간단한 예제는 T
타입 자체를 U로 추론하고, 그 결과로 U
를 반환합니다
infer의 실제 활용 예제
infer
키워드를 사용하면 복잡한 타입에서 특정 부분을 쉽게 추출할 수 있으며, 이를 통해 타입 변환을 간결하게 표현할 수 있다.
함수 반환 타입 추출
먼저, 함수의 반환 타입을 추출하는 예제를 살펴보자. TypeScript의 ReturnType
유틸리티 타입은 특정 함수 타입의 반환 타입을 추출하는 데 사용되며, 이를 infer
를 사용해 직접 구현해 볼 수 있다.
type MyReturnType<T> = T extends (...args: any[]) => infer R ? R : never;
type ExampleFunction = () => string;
type Result = MyReturnType<ExampleFunction>; // string
예제 2: 배열 요소 타입 추출
이번에는 배열의 요소 타입을 추출해보자.
type ElementType<T> = T extends (infer U)[] ? U : never;
type StringArray = string[];
type Result = ElementType<StringArray>; // string
위 예제에서 ElementType
타입은 배열 타입 T
에서 요소 타입을 추출한다. T
가 배열이라면 U
로 요소 타입을 추론하며, 그렇지 않으면 never
를 반환한다.
예제 3: Promise의 결과 타입 추출
마지막으로, Promise 타입의 결과를 추출하는 예제를 살펴보자.
type UnwrapPromise<T> = T extends Promise<infer U> ? U : T;
type ExamplePromise = Promise<number>;
type Result = UnwrapPromise<ExamplePromise>; // number
UnwrapPromise
타입은 주어진 Promise
타입에서 결과 타입을 추출한다. T
가 Promise
타입이면 U로 결과 타입을 추론하며, 그렇지 않으면 T
자체를 반환한다.
infer 사용 시 주의사항
infer
키워드는 매우 강력한 도구지만, 남용하면 코드가 복잡해질 수 있다. infer
를 사용해 너무 많은 타입을 추론하거나 중첩된 조건부 타입을 만들 경우, 코드의 가독성과 유지보수성이 떨어질 수 있다. 따라서, infer
는 필요한 경우에만 사용하고, 코드의 복잡성을 최소화하는 것이 중요하다.
결론
TypeScript의 infer
키워드는 제네릭 타입을 다룰 때 매우 유용한 도구이기에, 이를 통해 복잡한 타입 변환과 추론 작업을 간결하고 효과적으로 수행할 수 있으며, infer
를 적절히 사용하면 타입스크립트의 타입 시스템을 더욱 강력하게 활용할 수 있을 것이다.
'Develope > 기타' 카테고리의 다른 글
더 나은 코드 품질을 위한 SOLID 원칙 (0) | 2024.08.30 |
---|---|
Typescirpt any, unknown, never 정리 (0) | 2024.08.16 |
컴파일러(Compiler), 트랜스파일러(Transpiler) (0) | 2024.06.22 |
# Visual Studio Code(VSCode) 키보드 입력이 정상적으로 작동하지 않을 때 (0) | 2024.03.04 |
Visual Sutdio(VSCode) REST Client (0) | 2024.02.18 |