0
ロガーをTypeScriptに移植したところネイティブJavaScriptの実装と比べてコードサイズが驚いた。TypeScriptの `f(... args:any [])`のデッドコード生成を避ける
出典:
class Logger {
// …
trace(...args: any[]) {
this.invoke(TRACE, arguments);
}
debug(...args: any[]) {
this.invoke(DEBUG, arguments);
}
}
注:...args: any[]
コンパイラを満足させるしかありません。 args
は使用されておらず、実装には必要ありません。
活字体が生成します。
Logger.prototype.trace = function() {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i - 0] = arguments[_i];
}
this.invoke(TRACE, arguments);
};
バベル(または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)
}
}, …
質問:
- されていますTypeScriptにメソッドのパラメータを受け入れるように指示する方法がありますが、その方法ではnデッドコードが生成されますか?
- そうでない場合、使用されていない引数を無視するようにコンパイラに指示できますか?
なぜ、引数配列が非効率的に変換されるのですか?私はあなたがそれを使用することができます...ので、あなたが使用していない...args: any[]
一部から生成されたコードが肥大化している...
を
TypeScriptは非常に驚くほど優れています(使用方法が分かっている場合) - 多くの感謝! – hgoebl