はじめに
開発業務で下記のようなコードを見て、エラーが出ている理由が不明だったため型アサーションについて調べてみました。
type User = {
name: string;
age: number;
};
const tanaka = (): User => {
return { name: "田中" };
};
// エラー
// プロパティ 'age' は型 '{ name: string; }' にありませんが、型 'User' では必須です。
const yamaguchi = () => {
return { name: "山口" } as User;
}; // エラーではない
型アサーションとは
型推論の推測結果とは関係なく、型を上書きする機能です。
コンパイラーよりもプログラマーがより正確な型を知っている場合に使用します。
つまり、確信のある型にのみ型アサーションを使用して、その他はコンパイラーに任せる方がバグを生みにくいコードになります。
型アサーションの説明を踏まえて
上記のコードのtanaka関数式では、Typescriptコンパイラーがコードから型を推論した結果、ageプロパティが不足しているのではないかとコンパイラーに怒られている状態です。
一方で、yamaguchi関数式では、型アサーションを使用することでコンパイラーの型推論結果を上書きしているためエラーは発生しませんでした。