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