TypeScript - Object不支持属性或方法'defineProperty'

时间:2013-10-29 12:36:02

标签: 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代码,因此这一点变得尤为重要。有什么想法吗?

2 个答案:

答案 0 :(得分:9)

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

IE8的支持有限。

但是,IE10习惯在兼容模式下运行本地和内部网页,即使相同的页面通过Internet以正常模式运行。

您可以在工具&gt;对话框中更改此设置。兼容性视图设置(删除“在兼容模式下显示Intranet站点”选项。您还可以使用正确的doctype组合来防止这种情况:

<!DOCTYPE html> 

user-agent compatibility tag,IE11及以上版本将不再需要(或支持)。

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

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

答案 1 :(得分:1)

确保HTML文件的第一行是

<!doctype html>

这将阻止IE进入兼容模式并禁用ES5功能。