javascript - TypeScript - 对象不支持属性或方法 'defineProperty'

标签 javascript runtime-error typescript

我最近使用 Visual Studio 为一个相对复杂的模拟引擎创建了一个 TypeScript 项目,该引擎默认以 ECMAScript 3 (ES3) 为目标。我想开始在我的 TypeScript 类中使用真实属性,所以我将我的项目文件更新为目标 ES5,如下所示:

<PropertyGroup Condition="'$(Configuration)' == 'Debug'">
  <TypeScriptTarget>ES5</TypeScriptTarget>
  <TypeScriptRemoveComments>false</TypeScriptRemoveComments>
  <TypeScriptSourceMap>true</TypeScriptSourceMap>
  <TypeScriptModuleKind>AMD</TypeScriptModuleKind>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)' == 'Release'">
  <TypeScriptTarget>ES5</TypeScriptTarget>
  <TypeScriptRemoveComments>true</TypeScriptRemoveComments>
  <TypeScriptSourceMap>false</TypeScriptSourceMap>
  <TypeScriptModuleKind>AMD</TypeScriptModuleKind>
</PropertyGroup>

现在,当我在 IE (v10) 中运行我的应用程序时,出现运行时异常:“0x800a01b6 - JavaScript 运行时错误:对象不支持属性或方法‘defineProperty’”。如果我切换到使用任何其他浏览器(例如 Firefox、Chrome)启动我的应用程序,它会按预期工作——没有错误。我似乎找不到 IE 无法按预期工作的任何原因。我发现一个网站确认,一般来说,我的 IE 浏览器支持“defineProperty”,所以现在我真的很困惑为什么它在开发过程中不起作用。这变得特别重要,因为我无法在 VS 中调试我的 TypeScript 代码。有什么想法吗?

最佳答案

根据 ES5 兼容性表 Object.defineProperty is supported in IE9 and above .

IE8 的支持有限。

但是,IE10 有以兼容模式运行本地和内网页面的习惯,即使相同的页面在 Internet 上以正常模式运行也是如此。

您可以在“工具”>“兼容性 View 设置”的对话框中更改此设置(删除“以兼容模式显示 Intranet 站点”选项。您也可以使用正确的文档类型组合来阻止此设置:

<!DOCTYPE html> 

或者一个user-agent compatibility tag ,在 IE11 及更高版本中将不再需要(或支持)。

<meta http-equiv="x-ua-compatible" content="IE=edge">

这必须是 <head> 中的第一个标签元素。

关于javascript - TypeScript - 对象不支持属性或方法 'defineProperty',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19658392/

相关文章:

javascript - jquery.Event 动态元素

javascript - 加载错误页面时 iMacro 脚本崩溃

javascript - 无法使用 javascript 和 jquery 创建下拉框

php - 为什么 laravel 会出现应用程序错误

javascript - 向子 div 添加悬停效果不起作用

javascript - 如何从 Angular 函数中导出变量?

javascript - jquery 幸运轮得到错误的结果

python - AttributeError: 模块 'datetime' 没有属性 'time'

c++ - OpenCV 奇怪的内存损坏

javascript - Angular 2 - 表单数据