【问题标题】:Typing recursive function with union return type in typescript在打字稿中使用联合返回类型键入递归函数
【发布时间】:2021-08-25 15:03:26
【问题描述】:

我正在尝试键入一个 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 };
  }
}

谢谢。

【问题讨论】:

  • 你能解释一下这个问题中的“双变量”是什么意思吗?我对 TypeScript 中该术语的理解涉及 type variance,但我认为这里不会发生这种情况
  • 别在意这个,这可能是我对这个词的含义的误解,因为我对类型理论的知识完全为零。
  • 我很高兴将其更改为其他内容...您的意思是“变化”或“可变”或“依赖”还是什么?
  • 我的意思是该函数可以返回类型的联合。

标签: typescript recursion typing


【解决方案1】:

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

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

【讨论】:

  • 非常感谢!
猜你喜欢
  • 2015-06-12
  • 2022-01-12
  • 2019-04-09
  • 2021-12-15
  • 2015-08-10
相关资源
最近更新 更多