我在Angular 2组件代码中使用的是TypeScript Version 2。

我得到错误“属性“值”不存在类型“EventTarget”下面的代码,什么可能是解决方案。谢谢!

e.target.value.match(/\S+/g) || []).length

import { Component, EventEmitter, Output } from '@angular/core';

@Component({
  selector: 'text-editor',
  template: `
    <textarea (keyup)="emitWordCount($event)"></textarea>
  `
})
export class TextEditorComponent {
  @Output() countUpdate = new EventEmitter<number>();

  emitWordCount(e: Event) {
    this.countUpdate.emit(
            (e.target.value.match(/\S+/g) || []).length);
  }
}

当前回答

就我而言,我有:

const handleOnChange = (e: ChangeEvent) => {
  doSomething(e.target.value);
}

问题是我没有提供一个类型参数给ChangeEvent,这样它就知道e.target是一个HTMLInputElement。即使我手动告诉它target是一个输入元素(例如const target: HTMLInputElement = e.t target), ChangeEvent仍然不知道这是有意义的。

解决办法是:

// add type argument
const handleOnChange = (e: ChangeEvent<HTMLInputElement>) => {
  doSomething(e.target.value);
}

其他回答

由于我以稍微不同的方式搜索了两个问题,我复制了我的答案,以防你在这里结束。

在被调用的函数中,你可以用以下方法定义你的类型:

emitWordCount(event: { target: HTMLInputElement }) {
  this.countUpdate.emit(event.target.value);
}

这假设您只对目标属性感兴趣,这是最常见的情况。如果你需要访问事件的其他属性,一个更全面的解决方案包括使用&类型交集操作符:

event: Event & { target: HTMLInputElement }

你也可以更具体,而不是使用htmllinputelement,你可以使用例如HTMLTextAreaElement的文本区域。

应该使用currentValue,因为currentValue的类型是EventTarget & HTMLInputElement。

这是另一个简单的方法,我用过;

    inputChange(event: KeyboardEvent) {      
    const target = event.target as HTMLTextAreaElement;
    var activeInput = target.id;
    }

下面是指定event.target的另一种方法:

import { Component, EventEmitter, Output } from '@angular/core'; @Component({ selector: 'text-editor', template: `<textarea (keyup)="emitWordCount($event)"></textarea>` }) export class TextEditorComponent { @Output() countUpdate = new EventEmitter<number>(); emitWordCount({ target = {} as HTMLTextAreaElement }) { // <- right there this.countUpdate.emit( // using it directly without `event` (target.value.match(/\S+/g) || []).length); } }

考虑任何美元()

<textarea (keyup)="emitWordCount($any($event))"></textarea>