如何键入同时接受联合和该联合的任何类型的提示函数?

问题描述

$ cat foo.py

from typing import overload,Union,TypeVar

T = Union[int,str]
SubT = TypeVar("SubT",int,str)

@overload
def a(t: T) -> T:
    ...

@overload
def a(t: SubT) -> SubT:
    ...

def a(t: T) -> T:
    return t
$ mypy foo.py

foo.py:7: error: Overloaded function signatures 1 and 2 overlap with incompatible return types

为什么返回类型不兼容,如何进行类型检查?我想要这些示例返回类型:

v_1: Union[int,str] = 1
v_2: int = 2
v_3: str = "3"

a(v_1)  # Want Union[int,str].
a(v_2)  # Want int.
a(v_3)  # Want str.

我想避免为aint显式重载str,因为实际上SubT有2个以上的约束。

如果删除第一个重载,a(v_1)将不会输入check。如果删除第二个重载,则a(v_2)a(v_3)的返回值类型将分别提示为Union[int,str]而不是intstr

在我的实际问题中,我有一个IterableSubT下的同质类型(TypeVar)还是T下是同质类型(Union )。我想写一个a,它可以对两个元素都进行操作,并且如果在同类情况下也不会丢失粒度。

解决方法

:host ::ng-deep .mat-tab-header { position: fixed; } 将让您同时提供联合类型和联合本身作为选择:

TypeVar

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...