如何在控制台上打印一个方法的签名,其中最后一个参数是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());
__str__
&#13;
答案 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...
}