TypeScript 调用栈工具实现与参数命名规范

作者:半夏时间:2026-10-23 14:10:20浏览:618

本文介绍了一个 TypeScript 调用栈打印工具 CallStackTool 的实现细节。通过示例代码展示了如何追踪函数调用层级,并重点讨论了函数参数命名对调试可读性的影响。工具支持控制打印深度及是否显示无参函数的方法体内容,旨在提升代码调试效率。

TypeScript 调用栈工具概述

本文介绍了一个 TypeScript 调用栈的实现方案,供读者参考。

CallStackTool 核心实现


class CallStackTool{
  private static index:number = 0;
  public static printCallStack (count:number , simple: boolean = true):void {
    let caller:Function = arguments.callee.caller;
    let i:number = 0;
    count = count || 10;
    CallStackTool.index ++;
    if( CallStackTool.index > 500 ) CallStackTool.index = 1;
    console.log(`***-----------------${CallStackTool.index}Start----------------------- **`);
    while (caller && i < count) {
      console.log(`${(i+1)}: \n ${CallStackTool.getFunctionName(caller,simple)}`);
      caller = caller.caller;
      i++;
    }
    console.log(`***-----------------${CallStackTool.index}End----------------------- **`);
  }

  private static getFunctionName(func:any,simple: boolean):string {
    if( simple ){
      let name:any;
      if ( typeof func == 'function' ) {
        name = ('' + func).match(/function\s*\((\s*\$*\S+\s*,)*(\s*\$*\S+\s*)?\)/g);
        let $result: string = name && name[0];
        if( $result != `function ()` ){
          return $result;
        }
      }
    }
    return func.toString();
  }
}

以下是用于验证功能的测试代码。

测试用例与调用示例


class Test2CallStack{

  public add( i:number, b:number ):number{
    CallStackTool.printCallStack(2,true);
    return i +b;
  }

  public a( c:number, q:number ): number{
    return this.add(c,q);
  }

  public print() : void{
    console.log(`${this.a(1,1)}`);
  }
}

执行测试后的输出日志如下。

TypeScript 调用栈工具概述

最终得到的调用栈结果。

TypeScript 调用栈工具概述

函数参数命名与调试优化

因此,建议为函数参数赋予具有明确语义的名称,以提升代码可读性。

此外,工具会避免打印形如 function() 的空参数形式。当遇到没有参数的函数时,会将方法体的具体内容一并打印出来。

若需打印每个函数的方法体内容,可调用 CallStackTool.printCallStack(2, false),即将第二个参数设置为 false。

以上就是本文的全部内容,希望对您的学习有所帮助,也欢迎大家继续支持本站。

作者最新文章
相关文章
更多