Přeskočit na obsah

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'; // Literálový typ 'x', protože tuto hodnotu nelze změnit
let y = 'y'; // Typ string, protože tuto hodnotu lze změnit

V 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', // Toto je širší typ string
};
const fn = (x: X) => `${x}-foo`;
console.log(fn(o.x)); // Argument typu 'string' nelze přiřadit parametru typu '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,
};