代码之家  ›  专栏  ›  技术社区  ›  donzul

如何键入接收动态参数并执行递归的函数

  •  1
  • donzul  · 技术社区  · 6 年前

    我很难理解如何键入这个实用函数,它可以接收任何形式的对象/数组/数字/字符串的数据。

    然后调用相应的处理程序,如 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;
    }
    
    2 回复  |  直到 6 年前
        1
  •  2
  •   Titian Cernicova-Dragomir    6 年前

    可以使用泛型函数,并且结果类型和参数类型具有相同的泛型类型参数:

    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;
    }
    
        2
  •  2
  •   basarat    6 年前

    如何键入接收动态参数并执行递归的函数

    它本质上与 JSON.parse

    可以使用泛型类型参数:

    function parseData<T>(data)<T> {
    }