2013-03-23 80 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