[英]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.