gpt4 book ai didi

javascript - typescript编译后是否可以保留原来的函数头

转载 作者:行者123 更新时间:2023-12-02 23:04:07 24 4
gpt4 key购买 nike

通常可以通过以下方式查看函数信息:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com