使用 union return 在打字稿中键入递归函数

Typing recursive function with union return type in typescript

我正在尝试键入一个打字稿函数,该函数将 属性 添加到任意深度的嵌套数组中的对象。 运行时代码在 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 };
  }
}

谢谢。

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

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