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

如何不使用export const,用export async function实现指定泛型类型的异步函数?

解决方法

可以通过 TypeScript 内置的 Parameters 和 ReturnType 工具类型实现需求,无需手动拆解 Listener<Product, never> 的类型结构:

interface Product {
  id: string;
  name: string;
}

type Listener<Subject, Payload extends object> = (event: {
  subject: Subject;
  payload?: Partial<Payload>;
}) => Promise<void>;

export async function onEvent(
  ...[event]: Parameters<Listener<Product, never>>
): ReturnType<Listener<Product, never>> {
  await new Promise(function (resolve) {
    // 使用参数的简化示例
    console.log(event.subject.id, event.subject.name);

    setTimeout(resolve, 1000);
  });
}

原理说明

  • Parameters<Listener<Product, never>> 自动提取目标函数类型的参数列表,这里得到包含单个 event 参数的元组,通过剩余参数解构直接获取 event 变量并自动推导其类型。
  • ReturnType<Listener<Product, never>> 提取目标函数类型的返回值类型(此处为 Promise<void>),与异步函数的默认返回类型完全匹配。

这种方式完全复用原有 Listener 类型定义,既避免了手动复制类型结构的冗余,又保持了类型安全性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 14:55:31