具有函数表达式而不是函数声明的泛型类型

时间:2018-07-18 01:26:17

标签: typescript generics tsc typescript-generics

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

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。

1 个答案:

答案 0 :(得分:0)

我摆弄一些东西,这似乎可行:

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