`typing.cast` の呼び出しで、ソースの型が取り得る値をターゲットの型に代入できないものを報告します。 これは、「オーバーラップしていない」型と呼ぶことができます。

これは通常、誤りです。 変換が意図的である場合は、その意図を明確にするため、まずは式を共通の親の型に変換してください。

例:


from typing import cast

# 型がオーバーラップしていない — ミスの可能性があります
cast(int, "a")          # 'str' -> 'int'
cast(list[int], ["a"])  # 'list[str]' -> 'list[int]'

# 推奨される明示的な回避策は "二重キャスト" を使用することです
cast(int, cast(object, "a"))  # ok

# 正当なオーバーラップしているケース
cast(int, object())    # 有効なダウンキャスト
cast(object, 1)        # 有効なアップキャスト

# list が非変であるため、次のキャストは無効です。 このインスペクションでは現在サポートされていません。
int_list = [1, 2, 3]
cast(list[object], int_list)

このインスペクションは静的な型情報に依存しています。型が不明な場合、警告は報告されません。 ジェネリック型の変性はまだ考慮されていません。