コンテンツにスキップ

リテラル推論

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

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

const x = 'x'; // この値は変更できないため、リテラル型 'x'
let y = 'y'; // この値は変更できるため、型は string

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

type X = 'a' | 'b';
let o = {
x: 'a', // これはより広い string 型
};
const fn = (x: X) => `${x}-foo`;
console.log(fn(o.x)); // 型 'string' の引数を型 'X' のパラメーターに割り当てることはできません

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

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

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

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

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