[typescript] 타입스크립트의 제네릭을 활용한 GraphQL 타입 정의하기
GraphQL은 API를 위한 쿼리 언어이자 런타임 환경입니다. 타입스크립트(TypeScript)를 사용하여 GraphQL 스키마와 타입을 정의하는 것은 매우 효과적일 수 있습니다. 이러한 경우에 타입스크립트의 제네릭을 활용할 수 있습니다.
제네릭(Generic) 개념 소개
제네릭은 타입 안전성을 유지하기 위해 사용됩니다. 이를 통해 함수, 클래스, 인터페이스 등을 여러 데이터 타입으로 동작하도록 만들 수 있습니다. 제네릭은 다음과 같이 정의됩니다.
function identity<T>(arg: T): T {
return arg;
}
위 예제에서 T
는 제네릭 타입 매개변수로, 이 함수는 어떠한 타입이라도 받을 수 있습니다.
GraphQL 스키마에 제네릭 적용하기
GraphQL 스키마에 제네릭을 적용하면 다음과 같이 타입을 동적으로 처리할 수 있습니다.
type Resolver<Result, Args> = (
parent: any,
args: Args,
context: any,
info: any
) => Promise<Result> | Result;
위 코드에서 Resolver
는 Result
와 Args
로 제네릭 타입을 받아들입니다. 따라서 이를 활용하면 다양한 타입의 Resolver 함수를 정의할 수 있습니다.
예제
아래 예제는 타입스크립트 제네릭과 GraphQL을 함께 활용하여 간단한 스키마를 정의하는 방법을 보여줍니다.
interface Book {
title: string;
author: string;
}
interface QueryResult<T> {
data: T;
error: string | null;
}
const getBook: Resolver<QueryResult<Book>, { id: number }> = async (parent, args, context, info) => {
// 책 데이터 가져오기
return { data: { title: 'Sample Book', author: 'John Doe' }, error: null };
};
위 예제에서 getBook
은 QueryResult<Book>
타입을 반환하는데, 제네릭을 사용하여 일반화된 타입으로 동적으로 처리할 수 있습니다.
타입스크립트의 제네릭을 활용하면 GraphQL 스키마를 보다 유연하게 정의할 수 있으며, 재사용 가능한 코드를 작성하는 데 도움이 됩니다.
참고 자료: