0

我正在尝试将其添加到 .ts 文件的底部,但我在 VS2012 [under: 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//
4

2 回答 2

2

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

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

于 2013-03-25T21:51:19.783 回答
1

您需要扩展 Object 接口:

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

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

于 2013-03-24T02:28:07.330 回答