在 Python 函数类型注解中实现根据参数字符串决定返回类型

使用 Literial 类型与重载 #

使得 IDE 静态类型分析能够根据参数字符串推导出函数的返回类型:

from typing import TypeVar, Generic, Literal, Union, overload

StringType = TypeVar('StringType', bound=Literal['stringType'])
NumberType = TypeVar('NumberType', bound=Literal['numberType'])
BooleanType = TypeVar('BooleanType', bound=Literal['booleanType'])


@overload
def get_value(value_type: StringType) -> str: ...

@overload
def get_value(value_type: NumberType) -> int: ...

@overload
def get_value(value_type: BooleanType) -> bool: ...

@overload
def get_value(value_type: str) -> Any: ...

def get_value(value_type):
    if value_type == 'stringType':
        return 'string'
    elif value_type == 'numberType':
        return 42
    elif value_type == 'booleanType':
        return True
    else:
        return None


string_value = get_value('stringType')
number_value = get_value('numberType')
boolean_value = get_value('booleanType')