繁体   English   中英

TypeScript 箭头函数到字符串更改语法

[英]TypeScript Arrow Function To String Changes Syntax

JavaScript 没有问题,它看到一个匿名箭头函数,它的.toString()方法返回的正是那个。

 // This returns as expected // ie `() => ""` const t = [() => ""]; console.log(t[0].toString());

此示例使用 Babel,但在 TypeScript 中也会发生同样的情况。 TypeScript 看到一个匿名箭头函数并尝试创建一个匿名函数语句,如果尝试在其上运行eval则该语句无效。

 // This returns an incomplete function string const t = [() => ""] console.log(t[0].toString());

运行eval(t[0].toString())将返回错误:

SyntaxError: Function statements require a function name

有没有办法在使用 Babel/TypeScript 时保留正确的语法? 有没有其他更好的方法来实现这一目标?

结果字符串是:

function () { return ""; }

这无法正确解析,因为正如您阅读的错误所说:

函数语句需要函数名

 function () { return ""; }

没有名称,它只能存在于表达式上下文中。 这在不使用 Babel 时有效,因为在语法上允许独立的箭头函数表达式,但独立的无名function表达式则不允许。

一种方法是在eval时将函数分配给变量:

 var t = [function() { return "abc"; }] var result = eval(`var fn = ${t[0].toString()}; fn();`); console.log('result:', result);

(但您还应该考虑eval是否真的有必要 - 在许多情况下,它的使用表明对XY 问题的X 解决方案不够优雅 - 考虑是否有任何方法可以重构您的脚本以避免eval 。有时, eval是必要的,但是通常不是。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM