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

如何基于函数参数推断TypeScript函数的返回类型?

根据输入类型自动推断函数返回类型的解决方案

问题场景

现有如下TypeScript代码:

const handleNodes = (node: Node | Node[]) => {
  if (Array.isArray(node)) {
    return [{}];
  }
  return {};
};

期望实现:调用handleNodes([{}])时自动推断返回数组类型{}[],调用handleNodes({})时自动推断返回对象类型{},尝试条件类型后未成功,需找到正确实现方式。

两种可行方案

方案一:泛型结合条件类型

通过泛型绑定输入参数的类型,配合条件类型明确返回值与输入的对应关系:

// 定义条件类型,根据输入是否为数组决定返回类型
type HandleNodesReturn<T> = T extends Node[] ? {}[] : {};

const handleNodes = <T extends Node | Node[]>(node: T): HandleNodesReturn<T> => {
  if (Array.isArray(node)) {
    // 用类型断言告知编译器返回值符合条件类型
    return [{}] as HandleNodesReturn<T>;
  }
  return {} as HandleNodesReturn<T>;
};

方案二:函数重载

通过函数重载直接定义不同输入对应的返回类型,写法更直观:

// 重载签名:输入为数组时返回数组
function handleNodes(node: Node[]): {}[];
// 重载签名:输入为单个节点时返回对象
function handleNodes(node: Node): {};
// 实现签名:包含所有输入情况的逻辑
function handleNodes(node: Node | Node[]) {
  if (Array.isArray(node)) {
    return [{}];
  }
  return {};
}

效果验证

  • 调用handleNodes([{}])时,TypeScript会自动推断返回类型为{}[]
  • 调用handleNodes({})时,自动推断返回类型为{}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 03:32:38