Javascript typescript编译后是否可以维护原始函数头

Javascript typescript编译后是否可以维护原始函数头,javascript,typescript,Javascript,Typescript,通常可以通过以下操作查看功能信息: function somefunction(arg1, { a, b, c}){} someFunction.toString() 。。。编译并运行 //function somefunction(arg1, { a, b, c}){} //function someOtherFunction(arg1, _a){} 但是当typescript编译代码时,任何可能具有解构参数的函数都会被替换为_a: function someOtherFunction

通常可以通过以下操作查看功能信息:

function somefunction(arg1, { a, b, c}){}

someFunction.toString()
。。。编译并运行

//function somefunction(arg1, { a, b, c}){}
//function someOtherFunction(arg1, _a){}
但是当typescript编译代码时,任何可能具有解构参数的函数都会被替换为_a:

function someOtherFunction(arg1, { a, b, c}){}

console.log(someOtherFunction.toString())
。。。编译并运行

//function somefunction(arg1, { a, b, c}){}
//function someOtherFunction(arg1, _a){}
在仍然使用typescript的情况下,是否仍然可以检索原始解构参数信息

我在TS问题追踪器中搜索过,但在许多问题中迷失了方向。然而,在最初的搜索中,似乎没有什么东西能突出

编辑 由于我试图对ts节点执行此操作,因此解决方案正在更改目标和模块,如下所述:。这有效地确保了编译后的代码是es6代码,不会剥离解构

谢谢大家

运行Function.prototype.toString将始终打印出已编译的javascript,因此它取决于您的目标,因为这会改变它的编译方式。没有设置可以改变这一点,因为这是一个功能运行时javascript,Typescript在编译时不会对其产生任何影响

举个简单的例子:

function someFunction(
    arg1: string,
    { a, b, c }: {a: string, b: string, c: string}
){}
alert(someFunction.toString())
如果目标为ES5或更低,则解构分配不可用。因此,编译器在不假设环境支持的情况下进行重构赋值。它通过改变你的论点来完成同样的事情


所以你可以通过改变你的目标来解决这个问题,但是你的目标环境最好支持去结构。但是,如果您的编译是为了支持较旧的环境,那么调用toString将始终返回编译后在目标环境中工作的函数体。

不要这样分解参数。它与大多数浏览器不兼容。typescript正在尝试实现最大兼容性。当它在浏览器中运行时,它将运行传输的js代码。目前,您已将目标设置为ES5。如果将target更改为ES2015+,它将在transpiled.js文件中保留解构。这是特定的节点代码,因此与浏览器的兼容性对我来说不是那么重要。至于透明目标,这是完全有道理的。我必须将其更改为es5,ts节点才能工作。到时候我看看能不能找到绕过它的办法!谢谢是的,这似乎是我的问题。我试图使用ts节点来运行ts脚本,但它需要编译到commonjs才能工作。我试试别的办法!非常感谢。