ตัวแก้ไข GraphQL ที่ระบุชนิดด้วย GraphQL Code Generator
เขียนตัวแก้ไขด้วยชนิดข้อมูลนำเข้าและค่าที่ส่งกลับที่ถูกต้อง
ตัวแก้ไข GraphQL ที่ระบุชนิดด้วย GraphQL Code Generator เป็นบทเรียน TypeScript Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน TypeScript Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส TypeScript Academy มีบทเรียนทั้งหมด 4 บทเรียน
ปัญหาการกำหนดชนิดข้อมูลให้รีโซลเวอร์
รีโซลเวอร์ GraphQL เป็นฟังก์ชันทั่วไป แต่หากไม่มีลายเซ็นที่มีชนิดข้อมูล ก็ง่ายที่จะส่งคืนโครงสร้างที่ไม่ถูกต้อง เครื่องมือสร้างโค้ดจะสร้างชนิดข้อมูลของรีโซลเวอร์เพื่อบังคับให้ค่าที่ส่งกลับถูกต้อง
// Without typed resolvers — any type allowed
const userResolver = async (_, { id }) => fetchUser(id);การเพิ่มปลั๊กอินรีโซลเวอร์
ติดตั้งและกำหนดค่า @graphql-codegen/typescript-resolvers เพื่อสร้างชนิดข้อมูลของแมปรีโซลเวอร์
npm install --save-dev @graphql-codegen/typescript-resolverscodegen.yml สำหรับรีโซลเวอร์
เพิ่มเอาต์พุตของปลั๊กอินรีโซลเวอร์ควบคู่กับชนิดข้อมูล TypeScript พื้นฐาน
# codegen.yml
generates:
src/generated/types.ts:
plugins:
- typescript
src/generated/resolvers.ts:
plugins:
- typescript-resolversการใช้ ResolverMap ที่สร้างขึ้น
ใช้ชนิดข้อมูล Resolvers ที่สร้างขึ้นกับอ็อบเจ็กต์แมปรีโซลเวอร์ เพื่อความปลอดภัยของชนิดข้อมูลอย่างสมบูรณ์
import { Resolvers } from "./generated/resolvers";
const resolvers: Resolvers = {
Query: {
user: async (_, { id }) => fetchUser(id),
// Return type enforced: must match User schema
},
};การกำหนดชนิดข้อมูลให้บริบท
ส่งชนิดข้อมูลบริบทของคุณให้กับเจเนอริก Resolvers เพื่อให้ฟังก์ชันรีโซลเวอร์ได้รับอ็อบเจ็กต์บริบทที่มีชนิดข้อมูล
interface Context { db: Database; user?: AuthUser; }
// codegen.yml
config:
contextType: "src/context#Context"
// Generated: Resolvers<Context>
const resolvers: Resolvers<Context> = {
Query: {
me: (_, __, ctx) => ctx.user, // ctx: Context
},
};ชนิดข้อมูลตัวแมป
ชนิดข้อมูลตัวแมปช่วยให้คุณแมปชนิดข้อมูล GraphQL กับชนิดข้อมูลของโมเดลภายใน ทำให้รีโซลเวอร์ส่งคืนอ็อบเจ็กต์โดเมนของคุณแทนชนิดข้อมูลเอาต์พุตของ GraphQL ได้
# codegen.yml
config:
mappers:
User: "src/models#UserModel"การกำหนดชนิดข้อมูลให้รีโซลเวอร์ของฟิลด์
รีโซลเวอร์ของแต่ละฟิลด์ในชนิดข้อมูลก็มีการกำหนดชนิดข้อมูลเช่นกัน รวมถึงอาร์กิวเมนต์พาเรนต์และบริบท
// Typed field resolver on User type
const resolvers: Resolvers<Context> = {
User: {
fullName: (parent) => `${parent.firstName} ${parent.lastName}`,
// parent is UserModel (from mapper)
},
};มิวเทชันที่มีชนิดข้อมูล
รีโซลเวอร์ของมิวเทชันจะได้รับอาร์กิวเมนต์อินพุตที่มีชนิดข้อมูล ซึ่งสร้างมาจากชนิดข้อมูลอินพุตของสคีมา
// Schema: createUser(input: CreateUserInput!): User!
const resolvers: Resolvers = {
Mutation: {
createUser: (_, { input }) => {
// input: CreateUserInput — fully typed
return createUser(input.name, input.email);
},
},
};การสมัครรับข้อมูลที่มีชนิดข้อมูล
รีโซลเวอร์ของการสมัครรับข้อมูลมีฟังก์ชัน subscribe และฟังก์ชัน resolve ซึ่งทั้งคู่ได้รับการกำหนดชนิดข้อมูลโดยเครื่องมือสร้างโค้ด
const resolvers: Resolvers = {
Subscription: {
messageAdded: {
subscribe: () => pubsub.asyncIterator("MESSAGE_ADDED"),
resolve: (payload) => payload.messageAdded, // typed
},
},
};การรักษาความสอดคล้องของการสร้างโค้ด
เพิ่มฮุกก่อนสร้างหรือก่อนคอมมิตเพื่อสร้างชนิดข้อมูลของรีโซลเวอร์ใหม่เมื่อสคีมาเปลี่ยนแปลง ป้องกันไม่ให้ชนิดข้อมูลเก่าเข้าสู่ระบบจริง
// package.json
{
"scripts": {
"predev": "graphql-codegen",
"prebuild": "graphql-codegen"
}
}ทบทวน: รีโซลเวอร์ที่มีชนิดข้อมูล
ปลั๊กอินสร้างโค้ด typescript-resolvers จะสร้างชนิดข้อมูล Resolvers ที่บังคับให้โครงสร้างค่าที่ส่งกลับ ชนิดข้อมูลอาร์กิวเมนต์ และโครงสร้างบริบทของรีโซลเวอร์ GraphQL ทั้งหมดถูกต้อง
ตรวจสอบอย่างรวดเร็ว
ตัวเลือกการกำหนดค่า contextType ทำหน้าที่อะไรในการสร้างโค้ด
สิ่งที่คุณได้เรียนรู้
รีโซลเวอร์ GraphQL ที่มีชนิดข้อมูลและสร้างด้วยเครื่องมือสร้างโค้ดจะบังคับให้ชนิดค่าที่ส่งกลับ โครงสร้างอาร์กิวเมนต์ และอ็อบเจ็กต์บริบทถูกต้องทั่วทั้งแมปรีโซลเวอร์ ใช้ชนิดข้อมูลตัวแมปสำหรับอ็อบเจ็กต์โดเมน และคงเครื่องมือสร้างโค้ดไว้ในกระบวนการสร้างของคุณเพื่อป้องกันความคลาดเคลื่อน
คำถามที่พบบ่อย
บทเรียน “ตัวแก้ไข GraphQL ที่ระบุชนิดด้วย GraphQL Code Generator” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “ตัวแก้ไข GraphQL ที่ระบุชนิดด้วย GraphQL Code Generator” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส TypeScript Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส TypeScript Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “ตัวแก้ไข GraphQL ที่ระบุชนิดด้วย GraphQL Code Generator”
เขียนตัวแก้ไขด้วยชนิดข้อมูลนำเข้าและค่าที่ส่งกลับที่ถูกต้อง คุณปฏิบัติ TypeScript Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน TypeScript Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน TypeScript Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “ตัวแก้ไข GraphQL ที่ระบุชนิดด้วย GraphQL Code Generator” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน TypeScript Academy นี้ได้ไหม
ได้ บทเรียน TypeScript Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- สคีมา GraphQL เป็นชนิด TypeScript
- ตัวแก้ไข GraphQL ที่ระบุชนิดด้วย GraphQL Code Generator
- ไคลเอนต์ GraphQL ที่ระบุชนิดด้วย Apollo และ urql
- ความปลอดภัยของชนิดตั้งแต่ต้นจนจบ: เวิร์กโฟลว์เริ่มจากสคีมา