TypeScript 및 GraphQL을 최대한 활용하기: 공용체 유형
10298 단어 codegengraphqltypescript
This article was published on Tuesday, October 18, 2022 by @ The Guild Blog
소개
TypeScript와 GraphQL의 조합은 매우 강력할 수 있습니다. TypeScript와 GraphQL은 모두 식별된 공용체의 개념을 지원합니다.
이 짧은 블로그 게시물에서는 마지막 프로젝트 경험을 공유하고 TypeScript 및 GraphQL을 사용하여 더 강력한 유형을 만드는 가장 강력한 방법 중 하나를 공유하고자 합니다.
이 블로그 게시물의 가정 중 하나는 TypeScript를 알고 있다는 것입니다. 그렇지 않은 경우 "Basic Types" 핸드북을 확인할 수 있습니다.
이제 이 언어의 가장 놀라운 기능 중 하나인 TypeScript 공용체 유형에 대해 조금 이야기해 봅시다.
TypeScript에서 공용체 유형이란 무엇입니까?
따라서 TypeScript 언어는 유형 시스템을 기반으로 합니다.
TypeScript 통합 연산자는 정수 또는 숫자, 문자, 문자열, 부동 등 여러 데이터 유형을 보유할 수 있는 변수를 정의하는 데 사용할 수 있습니다.
여기에서 기본적인 예를 찾을 수 있습니다.
let pizzaLover: string | boolean // pizzaLover can be a string or boolean type
pizzaLover = 'YES' // string type
pizzaLover = true // boolean type
Here's a live example in TS Playground
TypeScript에서 공용체 유형을 사용하는 방법
TypeScript는 인터페이스와 같은 복잡한 유형을 결합하는 데에도 사용할 수 있습니다.
다른 유형을 포함하는 하나의 유형에 대해 생각할 수 있습니다. 다음은
Sushi
및 Pizza
2가지 유형을 결합한 간단한 예입니다. 둘 다 Food
라는 이름으로 하나의 유형으로 통합할 수 있습니다.type Sushi = {
kind: 'Sushi'
fish: string
amount: number
}
type Pizza = {
kind: 'Pizza'
topping: string
amount: number
}
type Food = Sushi | Pizza
Here's a live example in TS Playground
그리고 이번에는
string
및 string
가 포함된 또 다른 Union 유형의 예입니다.type PizzaAddons = 'olives' | 'mushrooms' | 'pepperoni'
const myPreference: PizzaAddons = 'olives' // ok
const myPreference: PizzaAddons = 'pineapple' // error
Here's a live example in TS Playground
GraphQL 유니온 및 TypeScript 유니온 유형
GraphQL은 서버의 API를 정의하는 데 사용되는 쿼리 언어입니다. TypeScript 또는 Go 언어와 마찬가지로 GraphQL은 공용체 및 인터페이스 유형을 지원합니다. 유형 시스템은 핵심 원칙 중 하나이며 이를 사용하여 유형에 안전한 API 호출을 할 수 있습니다. 목표는 이를 사용하여 백엔드 유형을 프런트엔드로 전파하는 것입니다.
TypeScript를 배우기 시작했을 때 많은 유형 오류와 성가신 맞춤법 오류를 발견했습니다. 이러한 오류는 프로젝트가 성장함에 따라 더 자주 발생했습니다.
해당 상황에 대한 최상의 솔루션은 GraphQL 스키마를 기반으로 유형 안전성을 추가하는 것이었습니다.
GraphQL 스키마는 Union 또는 Interface 키워드 덕분에 여러 개체 유형 중 하나를 반환할 수 있습니다. TypeScript와 마찬가지로 유니온에 포함된 객체 유형을 선언할 수 있습니다.
union Menu = Pizza | Sushi
Menu
또는 Pizza
를 반환할 수 있는 Sushi
공용체 유형을 정의하는 기본 예제 스키마를 살펴보겠습니다.union Menu = Pizza | Sushi
type Pizza {
title: String!
topping: String
}
type Sushi {
name: String!
fish: String
}
type Query {
menu: [Menu!]
}
GraphQL에서 유형을 선언하고 다른 유형 중 일부를 반환하는 공용체 유형을 생성한 후 GraphQL 스키마에서 TypeScript 유형을 생성하고 프런트엔드에서 사용할 수 있습니다.
GraphQL Codegen을 사용하여 코드를 생성하고 TypeScript 통합 유형을 처리하는 방법
우선, GraphQL Codegen의 모든 플러그인을 탐색하는 것을 환영합니다. GraphQL Code Generator
앞의 예에서 했던 것처럼 데이터를 앞쪽에 안전하게 입력하는 방법에 대해 이야기해 봅시다.
먼저 다음과 같이
GetFullMenu
쿼리를 생성해 보겠습니다.(이 경우
react-query
예를 사용하겠습니다)const menuQuery = gql`
query GetFullMenu {
menu {
...Sushi
...Pizza
}
}
fragment SomeSushi on Sushi {
name
fish
}
fragment SomePizza on Pizza {
title
topping
}
`
쿼리를 사용하여 스키마에서
Menu
유형을 가져오므로 Menu
내부의 개체를 가져올 수 있습니다.const Menu = () => {
const { data } = useQuery<MenuQuery>('menu', async () => {
const { menu } = await request(endpoint, menuQuery)
return menu
})
}
결론
Reference
이 문제에 관하여(TypeScript 및 GraphQL을 최대한 활용하기: 공용체 유형), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/the-guild/getting-the-best-of-typescript-and-graphql-union-types-2p22텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)