在 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;
};
我使用 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;
};