打印方法参数名称,其中最后一个参数是ES5中的扩展参数

时间:2017-09-10 19:07:06

标签: javascript typescript

如何在控制台上打印一个方法的签名,其中最后一个参数是TypeScript中的rest参数( ES5 )?

例如以下方法:

let funcSignature = this.execute.toString();
console.log(funcSignature);

应打印出来:

  

执行(params1,params2,... allOtherParams)

我陷入了rest参数,因为以下解决方案没有显示rest参数:

function (params1, params2) {
    var allOtherParams = [];
    for (var _i = 2; _i < arguments.length; _i++) {
        allOtherParams[_i - 2] = arguments[_i];
    }
    // doSomething...
}

我得到了这个:

function execute(params1, params2, ...allOtherParams) {
  //doSomething
}

// The third parameter is not shown in console.log ?
console.log(execute.toString());

&#13;
&#13;
__str__
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:1)

只需进行一些小修改:

function execute(params1, params2, ...allOtherParams) {
  //doSomething
}

console.log(execute.toSource().split('{')[0]);

它将打印源的开头,这正是签名。

免责声明:toSource不适用于生产网站,因为它不是标准的,而且我的行为是针对不同用户的。

答案 1 :(得分:1)

只有将typescript编译为 es6 (和更高版本)的javascript标准时,才有可能。

例如以下打字稿代码:

function execute(params1: number, params2: number, ...allOtherParams:number[]){
    // doSomething...
} 

当目标设置为 es5 时,代码将编译为:

function execute(params1, params2) {
    var allOtherParams = [];
    for (var _i = 2; _i < arguments.length; _i++) {
        allOtherParams[_i - 2] = arguments[_i];
    }
    // doSomething...
}

当目标设置为 es6 时,代码将编译为:

function execute(params1, params2, ...allOtherParams) {
    // doSomething...
}