具有以下代码:

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

我想要这样的结果:

handleNodes([{}]) // infer that this returns an array
handleNodes({}) // infer that this returns an object

我怎么能做到这一点?我试着用conditional types,但没有成功.

推荐答案

如果每个函数调用的参数数量不变,则可以使用function overloading

type DemoNode = {
    id?: string;
};

// Declare possible function calls with return types
function handleNodes (node: DemoNode): DemoNode
function handleNodes (node: DemoNode[]): DemoNode[]

// Implementation
function handleNodes (node: DemoNode | DemoNode[]) {
  if (Array.isArray(node)) {
    return [{}];
  }
  return {};
}

const res1 = handleNodes([]);
    // ^? const res1: DemoNode[]
const res2 = handleNodes({});
    // ^? const res2: DemoNode

Link to TS Playground

Typescript相关问答推荐

如果我有对象的Typescript类型,如何使用其值的类型?

如何访问Content UI的DatePicker/中的sx props of year picker?'<>

Angular 行为:属性类型从SignalFunction更改为布尔

webpack错误:模块找不到.当使用我的其他库时,

如何键入函数以只接受映射到其他一些特定类型的参数类型?

通配符路径与每条路径一起显示

如何使我的函数专门针对联合标记?

如何从扩展接口推断泛型?

笛卡尔产品类型

使用条件类型的类型保护

为什么Typescript只在调用方提供显式泛型类型参数时推断此函数的返回类型?

在打字脚本中对可迭代对象进行可变压缩

如何编辑切片器以使用CRUD调用函数?

使用ngfor循环时,数据未绑定到表

为什么在泛型方法中解析此promise 时会出现类型错误?

如何从JWT Reaction中提取特定值

Route.ts文件中未导出HTTP方法

我是否应该在 Next.js 中的服务器组件中获取秘密数据的所有函数中使用使用服务器?

基于泛型类型的条件类型,具有条目属性判断

在 TypeScript 中实现类型级别深度优先搜索