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