在 TypeScript 中将对象属性复制到另一个,导致错误 TS2339

Copy a object properties to another in TypeScript, cause error TS2339

我使用 extend() 函数来扩展一个对象:

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

还有一个 class Observer() 有一个方法 Update() 和一个 check 类型的对象 check

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'

如何解决这个错误?更改 extend() 函数?

下面的代码片段是你要找的吗?

class Observer extends HTMLInputElement{
    Update: any;
}

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

check.Update = function(value) {
    this.checked = value;
}

可能是 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;
};