การอนุมานชนิดลิเทอรัล
การอนุมานชนิดลิเทอรัลเป็นความสามารถของ TypeScript ที่ช่วยให้อนุมานชนิดของตัวแปรหรือพารามิเตอร์จากค่าของมันได้
ในตัวอย่างต่อไปนี้ เราจะเห็นว่า TypeScript ถือว่า x เป็นชนิดลิเทอรัล เนื่องจากไม่สามารถเปลี่ยนค่าได้ในภายหลัง ขณะที่ y ถูกอนุมานเป็น string เนื่องจากสามารถแก้ไขค่าได้ในภายหลัง
const x = 'x'; // ชนิดลิเทอรัล 'x' เพราะไม่สามารถเปลี่ยนค่านี้ได้let y = 'y'; // ชนิด string เพราะเราสามารถเปลี่ยนค่านี้ได้ในตัวอย่างต่อไปนี้ เราจะเห็นว่า o.x ถูกอนุมานเป็น string (ไม่ใช่ลิเทอรัลของ a) เนื่องจาก TypeScript พิจารณาว่าค่านี้สามารถเปลี่ยนได้ในภายหลัง
type X = 'a' | 'b';
let o = { x: 'a', // นี่คือสตริงที่มีชนิดกว้างกว่า};
const fn = (x: X) => `${x}-foo`;
console.log(fn(o.x)); // อาร์กิวเมนต์ชนิด 'string' ไม่สามารถกำหนดให้พารามิเตอร์ชนิด 'X' ได้ดังที่เห็น โค้ดจะแสดงข้อผิดพลาดเมื่อส่ง o.x ไปยัง fn เนื่องจาก X เป็นชนิดที่แคบกว่า
เราสามารถแก้ปัญหานี้ได้ด้วยการใช้การยืนยันชนิดกับ const หรือชนิด X:
let o = { x: 'a' as const,};หรือ:
let o = { x: 'a' as X,};