You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中实现TypeScript的Parameters类型功能?

在Python中实现类似TypeScript Parameters的类型获取功能

基础场景:提取函数参数类型

Python 3.10及以上版本,可借助typing.ParamSpec和TypeVar实现类似TypeScript Parameters的类型提取能力,用于获取函数的参数类型:

from typing import ParamSpec, TypeVar, Callable

# 定义参数规范和返回值类型变量
P = ParamSpec("P")
R = TypeVar("R")

# 仅用于类型标注,运行时无实际逻辑
def first_param_type(func: Callable[P, R]) -> type[P.args[0]]:
    pass

# 示例函数
def append_bar(b: str) -> str:
    return b + "Bar"

# 获取append_bar的第一个参数类型,标注给变量c
c: first_param_type(append_bar) = "Foo"

第三方库无法运行时导入的处理方案

如果第三方库无法在运行时导入(比如导入会触发副作用,或仅需类型检查时使用),可以利用typing.TYPE_CHECKING常量——它在运行时为False,仅类型检查工具(如pyright、mypy)运行时为True,以此安全实现类型标注:

方法1:利用函数注解提取类型

from typing import TYPE_CHECKING

# 仅类型检查时导入第三方库
if TYPE_CHECKING:
    from somelib import func
    # 提取func的目标参数类型
    XYZ = func.__annotations__["arg"]

def myfunc(arg: "XYZ"):
    # 运行时直接调用func(假设环境已加载该函数)
    func(arg)

方法2:用ParamSpec规范约束

from typing import TYPE_CHECKING, ParamSpec, TypeVar, Callable

if TYPE_CHECKING:
    from somelib import func
    P = ParamSpec("P")
    R = TypeVar("R")
    # 提取func的第一个参数类型
    FuncFirstParam = P.args[0]

def myfunc(arg: "FuncFirstParam"):
    func(arg)

方法3:pyright支持的简化写法

如果你使用pyright作为类型检查工具,可直接用类似TypeScript的语法:

from typing import TYPE_CHECKING

if TYPE_CHECKING:
    from somelib import func

def myfunc(arg: "Parameters[typeof(func)][0]"):
    func(arg)

不同类型检查工具对语法的支持略有差异,可根据使用的工具选择适配方案。

内容的提问来源于stack exchange,提问作者Otto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 15:27:46