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 コンストラクターに statics を追加しようとしているように見えます (つまり、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 の代わりにこれが使用されます。

于 2013-03-25T21:51:19.783 に答える
1

Object インターフェイスを拡張する必要があります。

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

それをコードのルート コンテキスト (モジュール内ではなく) に配置します。引数を「任意」として定義するだけであっても、入力を追加する必要があります

于 2013-03-24T02:28:07.330 に答える