Develope/기타

Typescript Infer란?

oper0116 2024. 8. 26. 16:14
반응형

infer란 무엇인가?

infer 키워드는 TypeScript의 조건부 타입(Conditional Types)과 함께 사용되어 특정 타입을 추론할 수 있는 메커니즘을 제공한다. 기본적으로 제네릭 타입에서 특정 부분을 추출하거나 변환할 때 유용하며, 타입스크립트가 타입을 추론하는 과정에서 특정 타입을 변수처럼 사용할 수 있다.

type Example<T> = T extends infer U ? U : never;

여기서 T extends infer UT 타입을 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 타입에서 결과 타입을 추출한다. TPromise 타입이면 U로 결과 타입을 추론하며, 그렇지 않으면 T 자체를 반환한다.

infer 사용 시 주의사항

infer 키워드는 매우 강력한 도구지만, 남용하면 코드가 복잡해질 수 있다. infer를 사용해 너무 많은 타입을 추론하거나 중첩된 조건부 타입을 만들 경우, 코드의 가독성과 유지보수성이 떨어질 수 있다. 따라서, infer는 필요한 경우에만 사용하고, 코드의 복잡성을 최소화하는 것이 중요하다.

결론

TypeScript의 infer 키워드는 제네릭 타입을 다룰 때 매우 유용한 도구이기에, 이를 통해 복잡한 타입 변환과 추론 작업을 간결하고 효과적으로 수행할 수 있으며, infer를 적절히 사용하면 타입스크립트의 타입 시스템을 더욱 강력하게 활용할 수 있을 것이다.

반응형