コンテンツにスキップ

リテラル推論

リテラル推論は、変数またはパラメーターの型を、その値に基づいて推論できる TypeScript の機能です。

次の例では、値を後から変更できないため、TypeScript が x をリテラル型と見なすことが分かります。一方、y は後からいつでも変更できるため、文字列として推論されます。

const x = 'x'; // Literal type of 'x', because this value cannot be changed
let y = 'y'; // Type string, as we can change this value

次の例では、TypeScript が値は後からいつでも変更できると見なすため、o.xstring として(a のリテラルとしてではなく)推論されたことが分かります。

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'

ご覧のとおり、X はより狭い型であるため、o.xfn に渡すとコードはエラーを発生させます。

この問題は、const または X 型による型アサーションを使用することで解決できます。

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

または、次のようにします。

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