2

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

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

并且有一个类Observer()有一个方法Update()和一个check类型的对象HTMLInputElement

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()功能?

4

2 回答 2

2

可能是交叉口类型的好场景?

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;
};
于 2015-11-03T14:12:09.943 回答
0

以下代码片段是您要找的吗?

class Observer extends HTMLInputElement{
    Update: any;
}

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

check.Update = function(value) {
    this.checked = value;
}
于 2015-11-03T14:09:25.837 回答