Odvozování literálových typů
Odvozování literálových typů je funkce TypeScriptu, která umožňuje odvodit typ proměnné nebo parametru na základě jeho hodnoty.
V následujícím příkladu vidíme, že TypeScript považuje x za literálový typ, protože hodnotu již později nelze změnit, zatímco u y odvodí typ string, protože ji lze později kdykoli upravit.
const x = 'x'; // Literal type of 'x', because this value cannot be changedlet y = 'y'; // Type string, as we can change this valueV následujícím příkladu vidíme, že typ o.x byl odvozen jako string (a nikoli jako literál a), protože TypeScript předpokládá, že hodnotu lze později kdykoli změnit.
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'Jak vidíte, kód při předání o.x do fn vyvolá chybu, protože X je užší typ.
Tento problém můžeme vyřešit přetypováním pomocí const nebo typu X:
let o = { x: 'a' as const,};nebo:
let o = { x: 'a' as X,};