TypeScriptの型付け方法の比較

2023-10-01
--

直接型アノテーション

const game: Game = {
	name: "League of Legends",
	genre: "MOBA"
}

ユースケース

  • 変数の型を明示的に定義したい場合。
  • TypeScriptの型チェックを活用してエラーを早期に検出したい場合。
  • 型アサーション

    const notes = await fetchNotes() as Promise<Note[]>

    ユースケース

  • 外部ソース(APIなど)からのデータを扱う際、型について確信があるがTypeScriptが推論できない場合。
  • 特定の理由でTypeScriptの推論した型をオーバーライドする必要がある場合。
  • 型アサーションはできるだけ避けましょう。アサートする型が有効であると確信できる場合にのみ使用してください。
  • satisfies演算子

    import type { SomeConfig } from 'lib';
    
    const cfg = {
    	db: "postgres",
    	username: "asdf",
    	// ...
    } as const satisfies SomeConfig

    ユースケース

  • 値の推論された型を変更せずに、特定の型に適合することを確認するために使います。オブジェクトが特定の形状や型に一致することを確認しつつ、後続の操作のために元の推論された型を保持したい場合に便利です。
  • 元の推論された型を変更せずに、オブジェクトが特定の型に一致することを確認したい場合。
  • 元の型推論の柔軟性を保持しつつ、特定の制約を適用したい場合。
  • 通常、設定ファイルで使うのに適しています。変数が設定の型を満たすことを確認したい場合に使います。as constと組み合わせると、設定の型で定義された型から実際の値に型を絞り込むのに便利です。例えば、usernameの型がstringではなく"asdf"として推論されるようになります。