تخطَّ إلى المحتوى

استدلال الأنواع الحرفية

استدلال الأنواع الحرفية ميزة في 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', // هذا نوع string أوسع
};
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,
};