• typing.NewType は、既存の型の値が特定の条件を満たしている、という状態を表現するために新しい型として定義する機能

  • typing.Final で変数への再代入がされていないかをチェックできる

  • さくっと型エイリアスを定義することもできる

    Book = dict[str, int | str]
    Library = dict[str, Book]
    
    lib: Library = {}
    book: Book = {"title": "たいとる", "price": 42}
    lib["ほんのなまえ"] = book
    
  • API から返ってくる JSON を dict にする場合など、異種コレクションになる場合は typing.TypedDict を継承したクラスを作ってメンバーに型を付与すれば良い(定義は dataclasses.dataclass みたいだけど、プロパティでアクセスすることはできない)

  • ジェネリクス

    def packing[T](val: T) -> list[T]:
        return [val]
    
    $ mypy --enable-incomplete-feature=NewGenericSyntax type_sample.py