TypeScript オブジェクトの型推論について

TypeScript ではオブジェクトの場合も型推論をしてくれます。

const obj = {
    hoge: 'abc',
    foo: 123,
    bar: true
};

obj.hoge = 123; // hoge は string を期待するためエラー
obj.foo = 'abc' // foo は number を期待するためエラー
obj.bar = 0 // bar は boolean を期待するためエラー

ただし、以前の記事で取り上げたように、const で宣言したとしても、各プロパティはリテラル型にはなりません。

これは、JavaScriptのオブジェクトのプロパティは再代入が可能なことが前提となっているためです。

リテラル型にしたいときは、アサーションを利用する必要があります。

例えば、上記の例で obj.hoge は 'abc’型としたい場合は以下のようにします。

const obj = {
    hoge: 'abc' as 'abc',
    foo: 123,
    bar: true
};

obj.hoge = 'def'; // hoge は 'abc'型を期待するためエラー