satisfies เทียบกับคำอธิบายชนิดข้อมูล
คงการอนุมานค่าคงที่ไว้ พร้อมตรวจสอบโครงสร้างไปด้วย
satisfies เทียบกับคำอธิบายชนิดข้อมูล เป็นบทเรียน TypeScript Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน TypeScript Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส TypeScript Academy มีบทเรียนทั้งหมด 4 บทเรียน
รูปแบบการระบุชนิด
รูปแบบคลาสสิก const config: Type = {...} จะตรวจสอบออบเจกต์ แต่ชนิดของตัวแปรจะกลายเป็น Type ทำให้ค่าลิเทอรัลภายในถูกขยายชนิด
type Config = { mode: string; level: number };
const config: Config = { mode: "dark", level: 5 };
// config.mode has type string
console.log(config.mode);ลักษณะของการขยายชนิด
เมื่อใช้การระบุชนิด config.mode จะเป็น string คุณไม่สามารถกำหนดค่าให้ตัวแปรที่คาดหวังลิเทอรัล "dark" ได้
type Config = { mode: string };
const config: Config = { mode: "dark" };
// const m: "dark" = config.mode; // Error: string not assignable to "dark"
console.log(config.mode);รูปแบบ satisfies
เมื่อใช้ const config = {...} satisfies Type ตัวแปรจะคงชนิดที่อนุมานได้แบบ ตรงตามจริงไว้ พร้อมทั้งยังได้รับการตรวจสอบเทียบกับ Type
type Config = { mode: string; level: number };
const config = { mode: "dark", level: 5 } satisfies Config;
// config.mode has type "dark"
console.log(config.mode);การอนุมานที่ตรงตามจริงยังคงอยู่
ตอนนี้ config.mode เป็นลิเทอรัล "dark" จึงใช้ได้ในทุกตำแหน่งที่ต้องการชนิดแบบแคบ
type Config = { mode: string };
const config = { mode: "dark" } satisfies Config;
const m: "dark" = config.mode; // OK
console.log(m);ทั้งสองแบบยังคงตรวจสอบความถูกต้อง
ทั้งสองรูปแบบจะปฏิเสธออบเจกต์ที่ไม่ถูกต้อง ความแตกต่างอยู่ที่ชนิดของตัวแปรผลลัพธ์เท่านั้น ไม่ได้อยู่ที่ว่าจะมีการตรวจสอบความถูกต้องหรือไม่
type Config = { level: number };
// const a: Config = { level: "x" }; // Error
// const b = { level: "x" } satisfies Config; // Error
const ok = { level: 3 } satisfies Config;
console.log(ok.level);ตรวจพบพร็อพเพอร์ตีส่วนเกิน
เช่นเดียวกับการระบุชนิด satisfies จะทำเครื่องหมายพร็อพเพอร์ตีส่วนเกินที่ไม่มีอยู่ในชนิดเป้าหมาย ซึ่งช่วยตรวจจับคำสะกดผิดในคีย์
type Config = { mode: string };
// const c = { mode: "dark", extar: true } satisfies Config; // Error: extar
const c = { mode: "dark" } satisfies Config;
console.log(c.mode);รักษาความเป็นทูเพิล
satisfies ยังช่วยให้อาร์เรย์คงความแม่นยำแบบทูเพิลไว้ได้เมื่อใช้ร่วมกับ as const พร้อมทั้งยังตรวจสอบชนิดของสมาชิก
type Nums = readonly number[];
const xs = [1, 2, 3] as const satisfies Nums;
// xs is a readonly tuple [1, 2, 3], validated as numbers
console.log(xs.length);การระบุชนิดขยายสมาชิกของยูเนียน
หากฟิลด์เป็นยูเนียนอย่าง "a" | "b" การระบุชนิดเป็นยูเนียนจะคงค่าไว้เป็นยูเนียน แต่ชนิดฟิลด์ที่กว้างกว่าจะทำให้ค่าถูกขยายชนิด ส่วน satisfies จะตรึงสมาชิกที่ตรงตามจริงไว้
type Config = { tier: string };
const withAnn: Config = { tier: "pro" }; // tier: string
const withSat = { tier: "pro" } satisfies Config; // tier: "pro"
console.log(withAnn.tier, withSat.tier);คงการเติมข้อความอัตโนมัติขณะอ่านค่า
เนื่องจาก satisfies รักษาคีย์และค่าลิเทอรัลไว้ โปรแกรมแก้ไขจึงสามารถเติมข้อความอัตโนมัติตามออบเจกต์ที่ตรงตามจริงได้ ไม่ใช่ตามชนิดที่ประกาศไว้ซึ่งกว้างกว่า
type Theme = Record<string, string>;
const theme = { bg: "black", fg: "white" } satisfies Theme;
// theme.<autocomplete shows bg and fg>
console.log(theme.bg, theme.fg);การเลือกระหว่างสองรูปแบบ
ใช้การระบุชนิดแบบปกติเมื่อคุณต้องการชนิดที่กว้างกว่าอย่างแท้จริง ใช้ satisfies เมื่อคุณต้องการการตรวจสอบความถูกต้อง แต่ยังต้องใช้โครงสร้างที่อนุมานได้อย่างแม่นยำในภายหลัง
type Config = { mode: string };
// Want wide type for reassignment flexibility -> annotation
let a: Config = { mode: "dark" };
// Want exact literals for later indexing -> satisfies
const b = { mode: "dark" } satisfies Config;
console.log(a.mode, b.mode);สรุปเปรียบเทียบแบบเคียงข้างกัน
การระบุชนิดจะขยายชนิด ส่วน satisfies จะรักษาความแม่นยำไว้ ทั้งสองแบบตรวจสอบความถูกต้อง สำหรับ config ที่ไม่เปลี่ยนแปลงและมีไว้ให้อ่าน โดยทั่วไป satisfies เป็นค่าเริ่มต้นที่ดีกว่า
type C = { color: string; size: number };
const widened: C = { color: "red", size: 1 };
const exact = { color: "red", size: 1 } satisfies C;
console.log(widened.color, exact.color);ตรวจสอบความเข้าใจอย่างรวดเร็ว: satisfies กับการระบุชนิด
ทดสอบความเข้าใจของคุณเกี่ยวกับความแตกต่างนี้
ทบทวน: satisfies กับการระบุชนิด
การระบุชนิดจะตรวจสอบความถูกต้อง แต่ขยายค่าลิเทอรัลให้เป็นชนิดพื้นฐานของค่าเหล่านั้น โอเปอเรเตอร์ satisfies จะตรวจสอบความถูกต้องและคงการอนุมานที่ตรงตามจริงไว้ ทั้งค่าลิเทอรัล คีย์ และความแม่นยำของทูเพิลจึงยังคงอยู่
type C = { mode: string };
const c = { mode: "dark" } satisfies C;
const exact: "dark" = c.mode;
console.log(exact);คำถามที่พบบ่อย
บทเรียน “satisfies เทียบกับคำอธิบายชนิดข้อมูล” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “satisfies เทียบกับคำอธิบายชนิดข้อมูล” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส TypeScript Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส TypeScript Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “satisfies เทียบกับคำอธิบายชนิดข้อมูล”
คงการอนุมานค่าคงที่ไว้ พร้อมตรวจสอบโครงสร้างไปด้วย คุณปฏิบัติ TypeScript Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน TypeScript Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน TypeScript Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “satisfies เทียบกับคำอธิบายชนิดข้อมูล” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน TypeScript Academy นี้ได้ไหม
ได้ บทเรียน TypeScript Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- เหตุใดจึงมี satisfies
- satisfies เทียบกับคำอธิบายชนิดข้อมูล
- satisfies เทียบกับการยืนยันด้วย as
- รูปแบบการใช้ satisfies ในทางปฏิบัติ