Javascript 避免在TypeScript中为`f(…args:any[])`生成死代码

Javascript 避免在TypeScript中为`f(…args:any[])`生成死代码,javascript,typescript,ecmascript-6,babeljs,typescript2.3,Javascript,Typescript,Ecmascript 6,Babeljs,Typescript2.3,我已经将一个记录器移植到TypeScript,与本机JavaScript实现相比,我对代码大小感到非常惊讶 来源: class Logger { // … trace(...args: any[]) { this.invoke(TRACE, arguments); } debug(...args: any[]) { this.invoke(DEBUG, arguments); } } 注意:…args:any[]仅用于满足编译器的要求参数未在实现

我已经将一个记录器移植到TypeScript,与本机JavaScript实现相比,我对代码大小感到非常惊讶

来源:

class Logger {
  // …    

  trace(...args: any[]) {
    this.invoke(TRACE, arguments);
  }

  debug(...args: any[]) {
    this.invoke(DEBUG, arguments);
  }
}
注意:
…args:any[]
仅用于满足编译器的要求<代码>参数未在实现中使用,也不需要

TypeScript生成:

Logger.prototype.trace = function () {
    var args = [];
    for (var _i = 0; _i < arguments.length; _i++) {
        args[_i - 0] = arguments[_i];
    }
    this.invoke(TRACE, arguments);
};
Logger.prototype.trace=函数(){
var args=[];
对于(var_i=0;_i
Babel(或Webpack/Uglify的某些内部构件,不确切地说)生成:

… }, {
    key: "trace", value: function () {
        for (var e = arguments.length, n = Array(e), t = 0; t < e; t++)n[t] = arguments[t];
        this.invoke(s, arguments)
    }
}, {
    key: "debug", value: function () {
        for (var e = arguments.length, n = Array(e), t = 0; t < e; t++)n[t] = arguments[t];
        this.invoke(l, arguments)
    }
}, …
…}{
键:“跟踪”,值:函数(){
对于(vare=arguments.length,n=Array(e),t=0;t
问题:

class Logger {
  // …    

  trace(...args: any[]) {
    this.invoke(TRACE, arguments);
  }

  debug(...args: any[]) {
    this.invoke(DEBUG, arguments);
  }
}
  • 有没有一种方法可以告诉TypeScript接受方法的任何参数,但不会生成死代码
  • 如果没有,是否可以建议编译器忽略这些未使用的参数

  • 顺便问一下,为什么参数数组的转换效率如此低?我会使用数组
    slice
    method…

    生成的代码因
    而膨胀…args:any[]
    您未使用的部分

    您可以使用它:

    trace(...args: any[]) {
        this.invoke(TRACE, ...args);
    }
    
    但是您仍然会得到比您想要的更多的代码,因此您可以向方法中添加另一个签名,并使用不带参数的实际实现:

    trace(...args: any[]);
    trace() {
        this.invoke(TRACE, arguments);
    }
    

    这将确保编译器理解方法需要参数,但实现没有参数,因此不会为它们生成代码。

    TypeScript非常好(如果知道如何使用它的话)-非常感谢!