簡體   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