Javascript TypeScript不';没有window.eval()
在JavaScript中,我可以做到:Javascript TypeScript不';没有window.eval(),javascript,typescript,eval,Javascript,Typescript,Eval,在JavaScript中,我可以做到: window.eval(userInput) 在客户端.js文件中,没有任何问题 但在TypeScript中,window.eval()不存在。我得到一个错误: property eval does not exist on type window 我怎样才能避开这个问题 我想使用eval()的原因是执行一些用户创建的代码。eval调用必须在全局范围内完成,因为用户代码依赖于我以前用标记加载的其他代码 有几种方法可以做到这一点 使用类型断言(类型不安全
window.eval(userInput)
在客户端.js
文件中,没有任何问题
但在TypeScript中,window.eval()
不存在。我得到一个错误:
property eval does not exist on type window
我怎样才能避开这个问题
我想使用
eval()
的原因是执行一些用户创建的代码。eval
调用必须在全局范围内完成,因为用户代码依赖于我以前用
标记加载的其他代码 有几种方法可以做到这一点
使用类型断言(类型不安全,但快速简便):
或者,您可以按照(类型安全)中的说明修改窗口声明。是否确实要运行用户创建的代码?是的,反正都是在客户端完成的,因此我认为不会造成任何伤害。即使有可能的伤害-我真的没有选择,因为这是一个编程谜题网站。你可以做像JSFIDLE这样的网站所做的事情,并在iframe中运行用户代码。你可以强制转换到
任意:(任意窗口)。eval(userInput)代码>eval
在typescript中声明为全局函数,但它不是窗口界面的一部分。因此,您应该能够单独调用它:eval(userInput)
。您是否有理由必须通过window.eval
访问它,而不只是正常调用它?您始终可以自己扩充窗口
接口来添加它。使用“Window as any”的潜在缺点是什么?@Roymunson您在类型断言的外部不会有类型安全性:理论上,您可以编写(Window as any).badMMethod()代码>并且它可以很好地编译。但它不应该影响您在其他任何地方使用窗口。
(window as any).eval("1 + 1");