การบวกและการลบระดับชนิดข้อมูล
สร้างการดำเนินการทางคณิตศาสตร์จากการจัดการทูเพิล
การบวกและการลบระดับชนิดข้อมูล เป็นบทเรียน TypeScript Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน TypeScript Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส TypeScript Academy มีบทเรียนทั้งหมด 4 บทเรียน
การคำนวณด้วยความยาว
เมื่อใช้การแทนค่าด้วยความยาวของทูเพิล การบวกจะกลายเป็นการต่อ และการลบจะกลายเป็นการนำคำนำหน้าออก คุณคำนวณบนทูเพิล แล้วอ่านความยาวของผลลัพธ์
type BuildTuple<N extends number, Acc extends unknown[] = []> =
Acc["length"] extends N ? Acc : BuildTuple<N, [...Acc, unknown]>;การบวก
หากต้องการบวก A + B: สร้างทูเพิลที่มีความยาว A สร้างอีกทูเพิลที่มีความยาว B กระจายองค์ประกอบของทั้งสองทูเพิลลงในทูเพิลใหม่ แล้วอ่านความยาวของทูเพิลนั้น
type Add<A extends number, B extends number> =
[...BuildTuple<A>, ...BuildTuple<B>]["length"];
type S = Add<3, 4>; // 7เหตุใดการต่อจึงเป็นการบวก
ทูเพิลที่มีความยาว 3 ต่อด้วยทูเพิลที่มีความยาว 4 จะได้ทูเพิลที่มีความยาว 7 เมื่อรวมขีดนับจำนวนของตัวนับสองชุดเข้าด้วยกัน ก็จะได้ตัวนับรวม ดังนั้นความยาวจึงถูกบวกกัน
type A = Add<2, 2>; // 4
type B = Add<0, 5>; // 5
type C = Add<1, 6>; // 7การลบด้วยคำนำหน้า
หากต้องการคำนวณ A - B: สร้างทูเพิลที่มีความยาว A แล้วอนุมานให้เป็นคำนำหน้าความยาว B ตามด้วยส่วนที่เหลือ ส่วนที่เหลือใน rest มีความยาว A - B
type Sub<A extends number, B extends number> =
BuildTuple<A> extends [...BuildTuple<B>, ...infer Rest]
? Rest["length"]
: never;
type D = Sub<7, 4>; // 3การลบแบบไล่ทีละขั้น
สำหรับ Sub<7, 4>: สร้างทูเพิลความยาว 7 จับคู่คำนำหน้าความยาว 4 เก็บ Rest ซึ่งมีความยาว 3 แล้วอ่านความยาวนั้น คำนำหน้าที่ถูกนำออกมีขีดนับจำนวนเท่ากับ B พอดี
type A = Sub<5, 2>; // 3
type B = Sub<4, 4>; // 0ค่าต่ำกว่าขอบเขตให้ผลลัพธ์ที่ไม่มีทางเกิดขึ้น
ตัวเลขระดับชนิดในที่นี้เป็นค่าที่ไม่ติดลบ หาก B > A จะไม่มีคำนำหน้าที่ถูกต้อง รูปแบบจึงไม่ตรงกัน และผลลัพธ์คือ never หากต้องการ คุณสามารถกำหนดค่าเริ่มต้นให้เป็น 0 ได้
type A = Sub<2, 5>; // never
type SubSafe<A extends number, B extends number> =
[Sub<A, B>] extends [never] ? 0 : Sub<A, B>;
type B = SubSafe<2, 5>; // 0การเพิ่มค่าและการลดค่า
กรณีพิเศษของการบวกและการลบทีละหนึ่งมีใช้บ่อยจนควรตั้งชื่อไว้ Inc เพิ่มองค์ประกอบหนึ่งตัว ส่วน Dec นำออกหนึ่งตัว
type Inc<N extends number> = [...BuildTuple<N>, unknown]["length"];
type Dec<N extends number> =
BuildTuple<N> extends [unknown, ...infer R] ? R["length"] : 0;
type A = Inc<4>; // 5
type B = Dec<4>; // 3การคูณด้วยการทำซ้ำ
การคูณคือการบวกซ้ำ ๆ ให้บวก B เข้ากับตัวสะสมเป็นจำนวน A ครั้ง โดยนับถอยหลังด้วย Dec และสะสมผลด้วย Add
type Mul<A extends number, B extends number, Acc extends number = 0> =
A extends 0 ? Acc : Mul<Dec<A>, B, Add<Acc, B>>;
type A = Mul<3, 4>; // 12ตัวช่วย BuildTuple
การดำเนินการทุกอย่างในที่นี้ขึ้นอยู่กับ BuildTuple ซึ่งเป็นพื้นฐานที่นำกลับมาใช้ซ้ำได้เพียงหนึ่งเดียว: ป้อนตัวเลขให้ แล้วได้ทูเพิลที่มีความยาวเท่ากับตัวเลขนั้น เก็บไว้ในที่เดียว แล้วสร้างส่วนที่เหลือไว้ด้านบน
type Five = BuildTuple<5>; // [unknown, unknown, unknown, unknown, unknown]
type N = Five["length"]; // 5การประกอบการดำเนินการ
เนื่องจากการดำเนินการแต่ละอย่างรับและคืนค่าเป็นตัวเลข จึงสามารถประกอบเข้าด้วยกันได้อย่างอิสระ คุณสามารถเขียนนิพจน์อย่าง Add<Mul<2, 3>, 4> แล้วคอมไพเลอร์จะประเมินผลให้
type Result = Add<Mul<2, 3>, 4>; // 10ข้อควรระวังในการใช้งานจริง
เทคนิคเหล่านี้เหมาะอย่างยิ่งกับจำนวนเล็ก ๆ เช่น ดัชนีอาร์เรย์ ขนาดคงที่ และช่วงค่าที่มีขอบเขต สำหรับตัวเลขขนาดใหญ่หรือคณิตศาสตร์ทั่วไป ขีดจำกัดการเรียกซ้ำและการไม่มีค่าติดลบทำให้ใช้งานจริงได้ยาก ใช้เทคนิคเหล่านี้เมื่อค่าต่าง ๆ ยังคงเล็กและคงที่
type A = Add<8, 7>; // 15 (fine)
// Add<5000, 5000> would exceed recursion limitsตรวจสอบความเข้าใจ
ทดสอบความเข้าใจของคุณเกี่ยวกับคณิตศาสตร์ระดับชนิด
ทบทวน
คุณได้สร้างการคำนวณทางคณิตศาสตร์ในระบบชนิด
- การบวก: ต่อทูเพิลแล้วอ่านความยาว
- การลบ: อนุมานคำนำหน้าแล้วอ่านความยาวของส่วนที่เหลือ
Inc/Decคือรูปแบบที่ทำทีละขั้นBuildTupleคือพื้นฐานที่ใช้ร่วมกัน
ถัดไป: การเปรียบเทียบตัวเลขในระดับชนิด
คำถามที่พบบ่อย
บทเรียน “การบวกและการลบระดับชนิดข้อมูล” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การบวกและการลบระดับชนิดข้อมูล” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส TypeScript Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส TypeScript Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การบวกและการลบระดับชนิดข้อมูล”
สร้างการดำเนินการทางคณิตศาสตร์จากการจัดการทูเพิล คุณปฏิบัติ TypeScript Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน TypeScript Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน TypeScript Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “การบวกและการลบระดับชนิดข้อมูล” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน TypeScript Academy นี้ได้ไหม
ได้ บทเรียน TypeScript Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การนับด้วยความยาวทูเพิล
- การบวกและการลบระดับชนิดข้อมูล
- การเปรียบเทียบระดับชนิดข้อมูล
- ยูทิลิตีชนิดข้อมูลตัวเลขในทางปฏิบัติ