2015-10-26 59 views
3

我想附加窗口對象的屬性。這是我的代碼。TypeScript索引對象類型的簽名隱式地有類型任何

cbid:string ='someValue'; 
window[cbid] = (meta: any) => { 
     tempThis.meta = meta; 
     window[cbid] = undefined; 
     var e = document.getElementById(cbid); 
     e.parentNode.removeChild(e); 
     if (meta.errorDetails) { 
      return; 
     } 
    }; 

編譯器開始拋出以下錯誤。對象的

打字稿指數簽名類型隱含的類型爲任何

誰能告訴我在哪裏,我做了錯誤?

回答

2

一個快速解決方法是允許將任何東西分配給窗口對象。你可以通過寫...

interface Window { 
    [propName: string]: any; 
} 

...在你的代碼中的某個地方。

或者,您可以使用--suppressImplicitAnyIndexErrors進行編譯,以便在分配給任何對象上的索引時禁用隱含的任何錯誤。

雖然我不會推薦這些選項。理想情況下,最好是not to assign to window,但如果你真的想要,那麼你應該可以在一個屬性上做所有事情,然後定義一個索引簽名,以匹配分配給它的索引簽名:

// define it on Window 
interface Window { 
    cbids: { [cbid: string]: (meta: any) => void; } 
} 

// initialize it somewhere 
window.cbids = {}; 

// then when adding a property 
// (note: hopefully cbid is scoped to maintain it's value within the function) 
var cbid = 'someValue'; 
window.cbids[cbid] = (meta: any) => { 
    tempThis.meta = meta; 
    delete window.cbids[cbid]; // use delete here 
    var e = document.getElementById(cbid); 
    e.parentNode.removeChild(e); 

    if (meta.errorDetails) { 
     return; 
    } 
}; 
相關問題