javascript - 向递归函数添加类型
问题描述
我有这个下面的函数来展平一个数组项,
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)
知道如何解决这个问题吗?
解决方案
你可能想做
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>
推荐阅读
- python - 重复输入值并显示奇数的总数和平均值,直到输入的数字
- node.js - 我收到此错误,错误:监听 EADDRINUSE:地址已在使用 :::5002,抛出 er;// 未处理的“错误”事件
- c - 关闭管道的写端不会向其他进程发送 EOF
- html - 如何将手风琴按钮的向下箭头放在左侧
- python - python中的微分方程系统
- java - 如何从android studio中动态添加的EditTexts将数据发送到另一个活动?
- windows - 使用从 AWS System Manager 触发的 Powershell 将新服务器添加到 DFS
- python - RuntimeError: shape '[1, 1, 399194]' 对于大小为 798388 的输入无效
- android - 如何仅在 XML 中的 TextView 上设置背景的 alpha?
- python - 在 Python 中,如何让不和谐机器人在特定时间发送 3 条不同的消息,只发送一次,而不会与我的主代码冲突?