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

TypeScript如何根据函数入参options对象动态推导返回类型并保留智能提示

解决方案

通过泛型+映射类型即可实现自动推导返回类型,无需编写大量重载,新增配置项只需维护1行映射关系,同时支持完整的智能提示。

类型定义

// 基础配置与返回接口定义
interface Selectable { selectable: boolean; }
interface SelectableReturn { selected: {value:any, index:number} }
interface Distant { distant: boolean; }
interface DistantReturn { distances: number[]; }

// 【核心】配置项与返回类型的映射表,新增配置仅需在此处添加一行
type OptionsReturnMap = {
  selectable: SelectableReturn,
  distant: DistantReturn
}

// 自动生成合法入参options的类型
type AllCreateArrayOptions = { [K in keyof OptionsReturnMap]?: boolean }

// 自动计算返回类型的工具类型
type CreateArrayReturn<Options extends AllCreateArrayOptions | undefined> = 
  any[] & (
    Options extends undefined ? unknown :
    { [K in keyof Options]: Options[K] extends true ? OptionsReturnMap[K] : unknown }[keyof Options]
  )

函数声明

无需编写任何重载,仅需1行泛型声明:

declare function createArray<Options extends AllCreateArrayOptions | undefined>(
  arr: any[], 
  options?: Options
): CreateArrayReturn<Options>

使用效果

调用时自动推导返回类型,支持完整智能提示:

  • 无options调用:const arr1 = createArray([1,2,3]),返回类型为any[]
  • 传入selectable: true:const arr2 = createArray([1,2,3], {selectable: true}),返回类型为any[] & SelectableReturn,可直接提示selected属性
  • 传入distant: true:const arr3 = createArray([1,2,3], {distant: true}),返回类型为any[] & DistantReturn,可直接提示distances属性
  • 同时传入多个配置:const arr4 = createArray([1,2,3], {selectable: true, distant: true}),返回类型为any[] & SelectableReturn & DistantReturn,同时提示两个扩展属性

扩展规则

后续新增配置项时仅需两步:

  1. 定义新增配置的入参类型和对应返回类型
  2. 在OptionsReturnMap中添加对应映射关系即可,无需修改函数声明

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 20:36:03