首页 > 解决方案 > 向递归函数添加类型

问题描述

我有这个下面的函数来展平一个数组项,

 private flatArray(data): [] {
    return data.reduce((accu, val) => (Array.isArray(val) ? accu.concat(this.flatArray(val)) : accu.concat(val)), []);
  }

现在我想为参数添加类型,下面是我的做法,

  private flatArray<T>(data: Array<Array<T>> | Array<T>): Array<T> 

但我得到这个错误,

无法调用其类型缺少调用签名的表达式。输入 '{ (callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T): T; (callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T, initialValue: T): T; (callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U, initialValue: U): U;...' 没有兼容的调用签名.ts(2349)

知道如何解决这个问题吗?

标签: javascripttypescripttypes

解决方案


你可能想做

private flatArray<T>(data: Array<T | Array<T>>): Array<T>

为了允许递归嵌套数组,一种更强大的方法是使用专用的只读类型。

interface NestedArray<T> extends ReadonlyArray<NestedArray<T> | T> { }

// ...

private flatArray<T>(data: NestedArray<T>): Array<T>

游乐场链接


推荐阅读