Javascript 向递归函数添加类型

Javascript 向递归函数添加类型,javascript,typescript,types,Javascript,Typescript,Types,我有下面这个函数来展平数组项 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

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

 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> 
私有flatArray(数据:数组|数组):数组
但是我得到了这个错误

无法调用其类型缺少调用签名的表达式。类型'{ (callbackfn:(以前的值:T,当前值:T,当前索引:number, 数组:T[])=>T:T;(callbackfn:(上一个值:T,当前值:T, currentIndex:number,数组:T[])=>T,initialValue:T:T; (callbackfn:(以前的值:U,当前值:T,当前索引: 数字,数组:T[])=>U,初始值:U):U;…'没有兼容的 电话签名.ts(2349)


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

你可能想这样做

private flatArray<T>(data: Array<T | Array<T>>): Array<T>
私有flatArray(数据:数组):数组
为了允许递归嵌套数组,一种更健壮的方法是使用专用的只读类型

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

// ...

private flatArray<T>(data: NestedArray<T>): Array<T>
接口NestedArray扩展ReadonlyArray{}
// ...
专用flatArray(数据:NestedArray):阵列

.flat()
虽然……我可以使用它,但它不支持IEN。有没有办法在不将数组类型缩小为只读的情况下做到这一点?你的意思是
NestedArray扩展了数组
?是的,这将函数限制为只接受可写数组。你确定这解决了OP描述的问题吗?因为我看不出两者之间有什么区别
Array | Array
Array
@Jonaswillms一个是T的数组或T的数组;另一个是数组,其元素可以同时是T或T的数组。@zerkms确定,但OP可能想要第一个。不确定这如何解决问题。也不确定这与
数据有何关系。reduce(…)
类型不匹配。