Вывод литеральных типов
Вывод литеральных типов — это возможность 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,};