2013-03-23 81 views
0

我试图将此添加到.ts文件的底部,但是我在VS2012 [如果(!Object.construct)]构建并扩展了一个错误[]没有定义。解决方案?浏览器兼容性代码不能在ts中编译

if (!Object.construct) { 
    Object.construct = function(base) { 
    var instance = Object.create(base); 
    if (instance.initialize) 
     instance.initialize.apply(instance, [].slice.call(arguments, 1)); 
    return instance; 
    } 
} 

if (!Object.extend) { 
    Object.extend = function(destination, source) { 
    for (var property in source) { 
     if (source.hasOwnProperty(property)) 
     destination[property] = source[property]; 
    } 
    return destination; 
    }; 
} 

尝试这样做:

interface Object { 
    extend(destination, source): any; 
    construct(base): any; 
} 

class Game { etc// 

回答

1

您需要扩展对象接口:

interface Object { 
    extend(destination, source): any; 
    construct(base): any; 
} 

地方,在你的代码的根上下文(不是内部模块)。即使只将参数定义为“any”,也应该添加输入内容。

+0

真棒,这非常感谢 – Nikos 2013-03-25 16:39:39

+0

嗯.. doesn' t似乎工作,仍然得到相同的错误 – Nikos 2013-03-25 17:16:51

+0

你把接口放在一个模块里面吗?它适用于我,这是我能想到的唯一原因。 – 2013-03-25 17:30:44

2

您不想在此处扩展Object接口。这是所有对象实例(即所有对象上的方法,如toString和valueOf)继承的内容。从上面看来,您似乎正试图将静态添加到Object构造函数(即类似于诸如Object.create和Object.keys之类的方法)。

Object构造函数在lib.d.ts文件中声明为var。您无法重新打开&在TypeScript的0.8.x版本中扩展已声明的变量。最简单的解决方案是为项目制作lib.d.ts的副本,并修改“declare var Object”语句以添加额外的功能。如果你引用你自己的lib.d.ts文件(即“\\”在你的项目文件中,它将使用这个而不是默认的lib.d.ts.

+0

我看,有道理,男人这似乎是一个痛苦的解决方法 – Nikos 2013-03-26 09:31:00

+0

实际上只是做了重复的签名,所以我刚刚添加第一个答案代码,它的工作 – Nikos 2013-03-26 11:17:35