0

这个函数声明编译并且似乎是正确的:

function flattenDeep<T>(arr: Array<any>): Array<T>{
  return Array.isArray(arr) ? arr.reduce( (a, b) => [...flattenDeep(a), ...flattenDeep(b)] , []) : [arr];
}

但是这个函数表达式不能编译:

 const flattenDeep<T> = (arr: Array<any>): Array<T> => {
   return Array.isArray(arr) ? arr.reduce( (a, b) => [...flattenDeep(a), ...flattenDeep(b)] , []) : [arr];
 };

如果可能的话,我正在寻找与函数表达式相同的正确语法。

我这样称呼 flattenDeep :

  enq(...args: Array<Array<X> | X>): Array<boolean> {
    return flattenDeep<X>(Array.from(arguments)).map(v => {
      return v['key'] ? this.enqueue(v.key, v.value) : this.enqueue(v.value);
    });
  }

我不确定我所拥有的是否足以传达flattenDeep应该返回类型 X。

4

1 回答 1

1

我又摆弄了一些,这似乎奏效了:

const flattenDeep =  <T>(arr: Array<any>): Array<T> => {
  return Array.isArray(arr) ? arr.reduce( (a, b) => [...flattenDeep(a), ...flattenDeep(b)] , []) : [arr];
};
于 2018-07-18T01:33:18.663 回答