在打字稿中,如何编写处理任意维数组的函数(例如:Array ,Array >,...)?

在打字稿中,如何编写处理任意维数组的函数(例如:Array <number>,Array <Array <number>>,...)?

问题描述:

在C++中,我可以写一个模板函数:在打字稿中,如何编写处理任意维数组的函数(例如:Array <number>,Array <Array <number>>,...)?

#include <stdio.h> 
#include <vector> 
template <typename V> 
void f(V& v){ 
    for(auto& e : v){ 
     f(e); 
    } 
    printf("\n"); 
} 

template <> 
void f(int& v){ 
    printf("%d ",v); 
} 

处理在矢量载体的任何尺寸(例如:矢量< int>的,矢量<矢量< INT >>,矢量<矢量<矢量< INT >>>,...):

int main(){ 
    std::vector<int> v1={1,2}; 
    f(v1); 
    std::vector<std::vector<int> > v2={{3,4},{5,6,7}}; 
    f(v2); 
    return 0; 
}; 

是这样的这种类型的功能:

let v1 : Array<number>=[1,2]; 
f<Array<number>>(v1); 

let v2 : Array<Array<number>>=[[3,4],[5,6,7]]; 
f<Array<Array<number>>>(v2); 

也可能在打字稿中?我尝试类似:

f<V>(v : V){ 
    for(let e in v){ 
    this.f(e); 
    } 
} 

f<>(v : number){ 
} 

但错误说

Duplicate function implementation. 

,我相信我可以是错误的做法

在C++中,你是完全专业的函数模板。
无论如何,打字稿中的泛型更像是Java或C#中的泛型,与C++中的模板不太相似。
你不能定义完整的专业化。

您只能有一个具有相同名称的函数,因此您需要将两个部分协调到同一个函数中。在这种情况下,对阵列进行简单的检查就足够了。

f(v: any) 
{ 
    if (Array.isArray(v)) 
    for (let e in v) 
     this.f(e); 
    else 
    doSomething(v); 
}