使用 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')