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