通常可以通过以下方式查看函数信息:
function somefunction(arg1, { a, b, c}){}
someFunction.toString()
...编译并运行
//function somefunction(arg1, { a, b, c}){}
但是当 typescript 编译代码时,任何可能具有解构参数的函数都会被替换为 _a:
function someOtherFunction(arg1, { a, b, c}){}
console.log(someOtherFunction.toString())
...编译并运行
//function someOtherFunction(arg1, _a){}
是否有办法在仍然使用 typescript 的同时检索原始解构的参数信息?
我在 TS 问题跟踪器中进行了深入研究,但在许多问题中迷失了方向。然而,初步搜索似乎没有什么结果。
编辑 由于我尝试使用 ts-node 执行此操作,因此解决方案是更改目标和模块,如下所述:https://github.com/TypeStrong/ts-node/issues/678 。这有效地保证了编译后的代码是es6代码,不会剥离解构!
谢谢大家!
最佳答案
运行Function.prototype.toString()
将总是打印出已编译的javascript,因此它取决于您的目标,因为这会改变它的编译方式。没有可以更改的设置,因为这是一个功能运行时 javascript,Typescript 在编译时不会对其产生任何影响。
举这个简单的例子:
function someFunction(
arg1: string,
{ a, b, c }: {a: string, b: string, c: string}
){}
alert(someFunction.toString())
如果目标是 ES5 或更低版本,解构赋值不可用。因此,编译器可以在不假设环境支持的情况下进行重组分配。它通过改变你的论点来完成同样的事情来做到这一点。
Example with ES3 target (click Run)
Example with ES2015 target (click Run)
<小时/>因此,您可以通过更改目标来“修复”此问题,但是您的目标环境最好支持解构。但是,如果您进行编译以支持较旧的环境,则调用 toString()
将始终返回编译为在目标环境中工作的函数体。
关于javascript - typescript编译后是否可以保留原来的函数头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57663405/