Pular para o conteúdo

Inferência Literal

A Inferência Literal é um recurso no TypeScript que permite que o tipo de uma variável ou parâmetro seja inferido com base em seu valor.

No exemplo a seguir, podemos ver que o TypeScript considera x um tipo literal, pois o valor não pode ser alterado posteriormente, quando em vez disso y é inferido como string, pois pode ser modificado a qualquer momento.

const x = 'x'; // Tipo literal de 'x', porque este valor não pode ser alterado
let y = 'y'; // Tipo string, pois podemos mudar este valor

No exemplo a seguir, podemos ver que o.x foi inferido como uma string (e não um literal de a) pois o TypeScript considera que o valor pode ser alterado a qualquer momento.

type X = 'a' | 'b';
let o = {
x: 'a', // Esta é uma string mais ampla
};
const fn = (x: X) => `${x}-foo`;
console.log(fn(o.x)); // Argument of type 'string' is not assignable to parameter of type 'X'

Como você pode ver, o código lança um erro ao passar o.x para fn pois X é um tipo mais estreito.

Podemos resolver este problema usando asserção de tipo usando const ou o tipo X:

let o = {
x: 'a' as const,
};

ou:

let o = {
x: 'a' as X,
};