如何不使用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
相关产品推荐
相关产品推荐

