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

如何根据Hook ID自动推导TypeScript回调参数类型

优化TypeScript钩子函数的类型推断

你可以通过将泛型与id参数的具体类型绑定,实现自动根据传入的Hook ID推断回调参数类型,无需手动指定泛型。优化后的代码如下:

enum HookID {
    OnOpened,
    OnClosed,
}

type HookArguments<T> = 
    T extends HookID.OnOpened ? {
        arg1: string,
        arg2: string
    }:
    T extends HookID.OnClosed ? {
        arg3: boolean,
        arg4: boolean
    } : never;

// 让泛型T约束为HookID,同时id的类型为T
function onHook<T extends HookID>(id: T, callback: (arg: HookArguments<T>)=> void){
   // 函数逻辑
}

// 调用时无需手动指定泛型,TypeScript会自动根据id推断类型
onHook(HookID.OnClosed, (args)=>{
    // args自动推断为{ arg3: boolean, arg4: boolean }
    console.log(args.arg3, args.arg4);
})

onHook(HookID.OnOpened, (args)=>{
    // args自动推断为{ arg1: string, arg2: string }
    console.log(args.arg1, args.arg2);
})

原理说明

  • 将泛型T的范围约束为HookID,确保传入的id只能是枚举中的有效值
  • 把id参数的类型指定为T,TypeScript会根据传入的具体枚举值自动推断出T的类型
  • 回调函数的参数类型HookArguments<T>会随着T的推断结果自动匹配对应的参数结构,完全不需要手动声明泛型参数

这样既保留了类型安全,又简化了函数调用的写法,完全符合你想要的“直接获取ID参数的类型并注入泛型”的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 13:18:11