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

当前回答

角10 +

tsconfig开放。禁用strictDomEventTypes。

  "angularCompilerOptions": {
    ....
    ........
    "strictDomEventTypes": false
  }

其他回答

我也遇到过类似的问题,我是这样解决的。通过使用这个自定义泛型类型

export type DatasetInjector<T, D extends DOMStringMap> = T & {
  dataset: D;
};

它是如何工作的?

在DatasetInjector中,泛型T指定HTML typescript类型,例如htmllinputelement或HTMLTextAreaElement。第二个泛型D用于提供关于输入标记(或任何其他HTML标记)的数据属性的缺失信息。

例子

这里我们为HTMLInputElement添加了数据属性inputId

// Now this can be used as funciton type for onChange handler for input element
// ChangeEventHandler<DatasetInjector<HTMLInputElement, { inputId: string }>>

export type DatasetInjector<HTMLInputElement, D extends DOMStringMap> = HTMLInputElement & {
  dataset: D; // D -> { inputId: string }
};

要了解更多信息,请参阅我的文章参考链接

角10 +

tsconfig开放。禁用strictDomEventTypes。

  "angularCompilerOptions": {
    ....
    ........
    "strictDomEventTypes": false
  }

我相信它一定会起作用,但我不知道具体是怎么回事。 另一种方法是,

<textarea (keyup)="emitWordCount(myModel)" [(ngModel)]="myModel"></textarea>


export class TextEditorComponent {
   @Output() countUpdate = new EventEmitter<number>();

   emitWordCount(model) {
       this.countUpdate.emit(
         (model.match(/\S+/g) || []).length);
       }
}

心理图像11 +。

tsconfig开放。禁用strictTemplates。

 "angularCompilerOptions": {
    ....
    ........
    "strictTemplates": false
  }

最好的方法是使用template =>添加id到您的输入,然后使用它的值

<输入类型=“文本”“了解更多”>

searchNotary(value: string) {
 // your logic
}

这样,当严格验证被激活时,你将永远不会出现Typescript错误=>参见angular Docs