2015-11-03 34 views
2

我使用extend()函數來擴展對象: 複製一個對象屬性到另一個在打字原稿,原因錯誤TS2339

function extend(obj: Object, extension: Object) { 
    for (var key in obj) { 
     try { 
      extension[key] = obj[key]; 
     } catch (e) { 
      console.error(e); 
     } 
    } 
} 

而且還有一類Observer() HAVA的方法Update()和一個對象checkHTMLInputElement類型。

class Observer { 
    Update(value) { } 
} 
var check:HTMLInputElement = document.createElement("input"); 

我用extend()功能擴展checkbox,所以它有方法Update()

extend(new Observer(), check); 
check.Update = function(value) { 
    this.checked = value; 
} 

進而導致錯誤TS2339:Property 'Update' does not exist on type 'HTMLInputElement' enter image description here

如何修正這個錯誤?更改extend()功能?

回答

2

對於intersection type可能是一個好方案?

function extend<T, U>(obj: T, extension: U) { 
    Object.keys(obj).forEach((key) => { 
     extension[key] = obj[key]; 
    }); 

    return extension as T & U; 
} 

var check: HTMLInputElement; 
var extended = extend(new Observer(), check); 

// example HTMLInputElement property use 
extended.attributes; 
// no compile error here either: 
extended.Update = function(value) { 
    this.checked = value; 
}; 
0

是下面的代碼片段,你在找什麼?

class Observer extends HTMLInputElement{ 
    Update: any; 
} 

var check:Observer = <Observer>document.createElement("input"); 

check.Update = function(value) { 
    this.checked = value; 
} 
相關問題