我遇到了麻烦,弄清楚如何输入这个实用程序函数,它可以接收任何形式的Object / Array / Number / String中的某些数据。
然后它调用它的各自处理程序,如parseArray
,它接收一个数组,然后在数组的每个项目上调用parseData
。
因此,这个函数几乎可以在任何结构中获取一些数据,并返回相同的结构并对其进行一些解析。
会喜欢这方面的指导。
function parseData(data) {
if (Array.isArray(data)) {
return parseArray(data);
}
if (typeof data === 'object') {
return parseObject(data);
}
if (typeof data === 'string') {
return parseString(data);
}
return data;
}
答案 0 :(得分:2)
您可以使用泛型函数,并且结果类型和参数类型具有相同的泛型类型参数:
function parseData<T>(data: T): T {
if (Array.isArray(data)) {
return parseArray(data);
}
if (typeof data === 'object') {
return parseObject(data);
}
if (typeof data === 'string') {
return parseString(data);
}
return data;
}
由于parse*
函数将采用不同的参数类型,您可能需要通过any
返回T
:
function parseData<T>(data: T): T {
if (Array.isArray(data)) {
return parseArray(data as any) as any;
}
if (typeof data === 'string') {
return parseString(data as string) as any;
}
if (typeof data === 'object') {
return parseObject(data);
}
return data;
}
function parseObject (data: any) : any {
return data;
}
function parseArray<T>(data: T[]) : T[] {
return data;
}
function parseString (data: string) : string {
return data;
}
答案 1 :(得分:2)
如何键入接收动态参数并进行递归的函数
它与JSON.parse
的类型基本相同。
您可以使用泛型类型参数:
function parseData<T>(data)<T> {
}