Javascript TypeScript不';没有window.eval()

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调用必须在全局范围内完成,因为用户代码依赖于我以前用标记加载的其他代码 有几种方法可以做到这一点 使用类型断言(类型不安全

在JavaScript中,我可以做到:

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");