首页 > 解决方案 > 在打字稿中使用联合返回类型键入递归函数

问题描述

我正在尝试键入一个打字稿函数,该函数将属性添加到任意深度的嵌套数组中的对象。运行时代码在 Javascript 中是微不足道的,但我整天都在努力让 Typescript 类型进行编译。

[{}, {}]代码应该采用这样或这样[[{},{}]]或这样的数组[[[{},{}]]]并将marked:true属性添加到每个对象;

type Nested<T> = T | Array<Nested<T>>;
function markNested<T>(objOrNestedArray: Nested<T>): T {
  if (Array.isArray(objOrNestedArray)) {
    return objOrNestedArray.map(markNested);
  } else {
    return { ...objOrNestedArray, marked: true };
  }
}

谢谢你。

标签: typescriptrecursiontyping

解决方案


您只是缺少函数的正确返回类型。它需要Nested<T>像源数组一样。为了完整起见,我还添加了标记属性,因为这可能对查找有用。

function markNested<T>(objOrNestedArray: Nested<T>): Nested<T & { marked: boolean }> {
  /*... */
}

推荐阅读