属性'checked'在类型'EventTarget'上不存在。ts(2339) Angular

14 浏览
0 Comments

属性'checked'在类型'EventTarget'上不存在。ts(2339) Angular

问题与此相同:TypeScript: Property \'checked\' does not exist on type \'EventTarget & Element\'. Why it doesn\'t exist?\n但仅适用于不同的框架。\n我需要关于ANGULAR 2+的答案。我目前正在使用angular 9。\n

public CheckBoxChange(event: Event) { 
    this.service.change(this.d!.id.toString(), event.target.checked).subscribe(res => {
        console.log(res
    }, err => {
        console.log(err)
    })
}

\n问题出在event.target.checked这里。\n错误信息:\n

\nProperty \'checked\' does not exist on type \'EventTarget\'.ts(2339)\n

\n如何解决这个问题?好吧,我可以设置类型为any,但这并不是解决方案。

0
0 Comments

问题出现的原因是在访问event.target时,TypeScript编译器无法推断出event.target确实是一个复选框,所以它假设它是一个通用的HTMLElement。如果你想访问复选框的属性,也就是一个HTMLInputElement,你必须自己指定类型。

解决方法是在处理函数中传递target而不是event。然后在处理函数中,你会接收到$target: EventTarget,并通过const ischecked = ($target).checked;来获取ischecked。

以下是修正后的代码示例:

public CheckBoxChange(target: EventTarget) { 
    const ischecked = (target).checked;
    this.service.change(this.d!.id.toString(), ischecked).subscribe(res => {
        console.log(res);
    }, err => {
        console.log(err);
    });
}

通过这种方式,你可以明确地指定target的类型,从而避免了类型错误的问题。

0