ชนิดข้อมูล Effect
ทำความเข้าใจ Effect
ชนิดข้อมูล Effect เป็นบทเรียน TypeScript Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน TypeScript Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส TypeScript Academy มีบทเรียนทั้งหมด 4 บทเรียน
ชนิดเอฟเฟกต์
ชนิดหลักคือ Effect<Success, Error, Requirements> พารามิเตอร์ชนิดข้อมูลทั้งสามรายการอธิบายทุกสิ่งที่การคำนวณทำได้ ได้แก่ สิ่งที่สร้างขึ้น วิธีที่อาจล้มเหลว และสิ่งที่จำเป็นต้องใช้
import { Effect } from "effect";
// Effect<A, E, R>
// A = success value type
// E = error type
// R = required services (dependencies)ช่องทางความสำเร็จ (A)
พารามิเตอร์ตัวแรกคือค่าที่สร้างขึ้นเมื่อสำเร็จ Effect.succeed สร้างเอฟเฟกต์ที่ให้ค่าเสมอโดยไม่มีข้อผิดพลาดและไม่มีข้อกำหนด
import { Effect } from "effect";
const ok = Effect.succeed(42);
// Effect<number, never, never>ช่องทางข้อผิดพลาด (E)
พารามิเตอร์ตัวที่สองคือข้อผิดพลาดที่ระบุชนิดไว้ never หมายความว่าเอฟเฟกต์ไม่สามารถล้มเหลวได้ หากเป็นชนิดข้อผิดพลาดจริง ผู้เรียกใช้ต้องคำนึงถึงข้อผิดพลาดนั้น
import { Effect } from "effect";
class NotFound { readonly _tag = "NotFound"; }
const failing = Effect.fail(new NotFound());
// Effect<never, NotFound, never>ช่องทางข้อกำหนด (R)
พารามิเตอร์ตัวที่สามแสดงรายการบริการที่เอฟเฟกต์ต้องพึ่งพา never หมายความว่าเอฟเฟกต์ทำงานได้ด้วยตัวเอง มิฉะนั้นจะไม่สามารถทำงานได้จนกว่าจะจัดเตรียมบริการเหล่านั้น
// Conceptually:
// Effect<User, NotFound, Database>
// produces a User, may fail with NotFound, needs a Databaseการอ่านลายเซ็น
คุณสามารถอ่านชนิดเอฟเฟกต์เหมือนประโยคหนึ่งได้ว่า "สร้าง A หรือล้มเหลวด้วย E เมื่อมี R" ชนิดข้อมูลเดียวนี้ใช้แทนพรอมิส การโยนข้อผิดพลาดโดยนัย และตัวแปรส่วนกลางที่ซ่อนอยู่
never ในฐานะเอกลักษณ์
never เป็นค่าเป็นกลางสำหรับช่องทาง E และ R: ไม่มีข้อผิดพลาดที่อาจเกิดขึ้นและไม่มีสิ่งที่ต้องพึ่งพา เมื่อคุณประกอบเอฟเฟกต์ ชนิดข้อผิดพลาดและข้อกำหนดจะสะสมกันเป็นยูเนียน
การสร้างเอฟเฟกต์จากค่า
ตัวสร้างที่ใช้บ่อย ได้แก่ succeed (ค่าบริสุทธิ์), fail (ข้อผิดพลาดที่ระบุชนิด) และ sync (ห่อผลข้างเคียงแบบทำงานพร้อมกัน)
import { Effect } from "effect";
const now = Effect.sync(() => Date.now());
// Effect<number, never, never>การห่อหุ้มงานแบบไม่พร้อมกัน
Effect.promise และ Effect.tryPromise ยกพรอมิสให้เป็นเอฟเฟกต์ ส่วน tryPromise ช่วยให้คุณแปลงการปฏิเสธเป็นข้อผิดพลาดที่ระบุชนิดในช่องทาง E ได้
import { Effect } from "effect";
const fetchUser = Effect.tryPromise({
try: () => fetch("/user").then((r) => r.json()),
catch: (e) => new Error("fetch failed: " + String(e)),
});
// Effect<any, Error, never>ชื่อแทนชนิดสำหรับช่องทาง
สำหรับบริการ Effect มีชื่อเต็มว่า Effect.Effect<A, E, R> ช่องทางต่าง ๆ เป็นอิสระจากกัน คุณอาจมีข้อผิดพลาดโดยไม่มีข้อกำหนด หรือมีข้อกำหนดโดยไม่มีข้อผิดพลาดก็ได้
เหตุผลที่มีสามช่องทาง
สามช่องทางนี้ครอบคลุมสามสิ่งที่ทำให้โค้ดทำความเข้าใจได้ยาก ได้แก่ ผลลัพธ์ รูปแบบความล้มเหลว และบริบทที่โค้ดทำงาน การเปิดเผยทั้งสามสิ่งไว้ในชนิดข้อมูลเดียวทำให้ Effect มีหลักประกันด้านความปลอดภัย
เหตุผลที่เรื่องนี้สำคัญ
การทำความเข้าใจ Effect<A, E, R> คือกุญแจสำคัญสู่เรื่องอื่นทั้งหมด: การประกอบเอฟเฟกต์จะรวมช่องทางเหล่านี้ การจัดการข้อผิดพลาดจะทำให้ E แคบลง และการจัดเตรียมสิ่งที่ต้องพึ่งพาจะล้าง R ออก เมื่ออ่านชนิดข้อมูลแล้ว คุณจะทราบแน่ชัดว่าการคำนวณทำอะไร
ตรวจสอบความเข้าใจอย่างรวดเร็ว
ยืนยันความเข้าใจของคุณเกี่ยวกับชนิดเอฟเฟกต์
ทบทวน
Effect<A, E, R> เข้ารหัสค่า ความสำเร็จ ข้อผิดพลาดที่ระบุชนิด และ สิ่งที่ต้องพึ่งพา ที่จำเป็นไว้ในชนิดข้อมูลเดียว โดย never เป็นค่าเป็นกลางสำหรับ E และ R ตัวสร้างอย่าง succeed, fail, sync และ tryPromise ใช้สร้างเอฟเฟกต์ที่มีช่องทางเหมาะสม
คำถามที่พบบ่อย
บทเรียน “ชนิดข้อมูล Effect” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “ชนิดข้อมูล Effect” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส TypeScript Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส TypeScript Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “ชนิดข้อมูล Effect”
ทำความเข้าใจ Effect คุณปฏิบัติ TypeScript Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน TypeScript Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน TypeScript Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “ชนิดข้อมูล Effect” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน TypeScript Academy นี้ได้ไหม
ได้ บทเรียน TypeScript Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ