リテラル推論
リテラル推論は、変数またはパラメーターの型を、その値に基づいて推論できる 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,};