การอนุมานชนิดลิเทอรัล
การอนุมานชนิดลิเทอรัลเป็นความสามารถของ TypeScript ที่ช่วยให้อนุมานชนิดของตัวแปรหรือพารามิเตอร์จากค่าของมันได้
ในตัวอย่างต่อไปนี้ เราจะเห็นว่า TypeScript ถือว่า x เป็นชนิดลิเทอรัล เนื่องจากไม่สามารถเปลี่ยนค่าได้ในภายหลัง ขณะที่ y ถูกอนุมานเป็น string เนื่องจากสามารถแก้ไขค่าได้ในภายหลัง
const x = 'x'; // Literal type of 'x', because this value cannot be changedlet y = 'y'; // Type string, as we can change this valueในตัวอย่างต่อไปนี้ เราจะเห็นว่า o.x ถูกอนุมานเป็น string (ไม่ใช่ลิเทอรัลของ a) เนื่องจาก TypeScript พิจารณาว่าค่านี้สามารถเปลี่ยนได้ในภายหลัง
type X = 'a' | 'b';
let o = { x: 'a', // This is a wider string};
const fn = (x: X) => `${x}-foo`;
console.log(fn(o.x)); // Argument of type 'string' is not assignable to parameter of type 'X'ดังที่เห็น โค้ดจะแสดงข้อผิดพลาดเมื่อส่ง o.x ไปยัง fn เนื่องจาก X เป็นชนิดที่แคบกว่า
เราสามารถแก้ปัญหานี้ได้ด้วยการใช้การยืนยันชนิดกับ const หรือชนิด X:
let o = { x: 'a' as const,};หรือ:
let o = { x: 'a' as X,};