浏览器兼容性代码无法在ts中编译

时间:2013-03-23 20:30:56

标签: typescript

我正在尝试将其添加到.ts文件的底部,但是我在VS2012中遇到错误[在 if(!Object.construct)]下,构造和扩展未定义。溶液

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//

2 个答案:

答案 0 :(得分: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。

答案 1 :(得分:1)

您需要扩展Object接口:

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

将其放在代码的根上下文中(不在模块内)。您还应该添加输入,即使它只将参数定义为“any”