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

TypeScript中如何为回调参数加类型且不破坏返回类型推导

TypeScript中create2函数的类型适配方案

你当前的create2函数使用单个泛型T同时约束回调函数的参数类型和返回类型,导致返回类型被限制为与参数类型一致,无法自动推导回调函数实际的返回类型。要实现指定参数类型+自动推导返回类型的需求,只需将泛型拆分为两个独立的类型参数:

修改后的create2函数

function create2<T, R>(callback: (arg: T) => R): R {
  // 使用类型断言处理null与T类型不匹配的问题
  return callback(null as unknown as T);
}

使用示例

调用时只需显式指定参数类型T,返回类型R会由TypeScript自动根据回调函数的返回值推导:

// 参数类型为{ data: string },返回类型自动推导为number
const numberType2 = create2<{ data: string }>(({ data }) => 1);

// 参数类型为{ is: boolean },返回类型自动推导为string
const stringType2 = create2<{ is: boolean }>(({ is }) => 'foo');

原理说明

  • T:专门用于约束回调函数的参数类型,由调用者显式指定
  • R:用于接收回调函数的返回类型,由TypeScript根据回调函数的实际返回值自动推导
  • 类型断言null as unknown as T:解决null无法直接赋值给T类型参数的编译错误,若实际场景中参数有合法值,可替换为对应值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 18:51:11