typescript.lib/lib.dom.d.ts 中的 HTMLElement 定义被 @types/react/global.d.ts 覆盖

foo*_*urt 10 typescript reactjs

在此处输入图片说明

编译器找到 的定义HTMLElement,但react/global.d.ts取自的定义而不是typescript/lib/lib.dom.d.ts

这是编译器错误:

Property 'value' does not exist on type 'EventTarget'.  TS2339
Run Code Online (Sandbox Code Playgroud)

以下是差异:

在 react/global.d.ts

Property 'value' does not exist on type 'EventTarget'.  TS2339
Run Code Online (Sandbox Code Playgroud)

在打字稿/lib/lib.dom.d.ts

interface Element { }

interface HTMLElement extends Element { }
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:如何让编译器typescript/lib/lib.dom.d.ts在 React 之前选择?任何帮助将不胜感激?

编辑:这是tsconfig.json正确引用 TS 库的 :

interface HTMLElement extends Element, GlobalEventHandlers, DocumentAndElementEventHandlers, ElementContentEditable, HTMLOrSVGElement, ElementCSSInlineStyle {
    accessKey: string;
    readonly accessKeyLabel: string;
    autocapitalize: string;
    dir: string;
    draggable: boolean;
    hidden: boolean;
    innerText: string;
    lang: string;
    readonly offsetHeight: number;
    readonly offsetLeft: number;
    readonly offsetParent: Element | null;
    readonly offsetTop: number;
    readonly offsetWidth: number;
    spellcheck: boolean;
    title: string;
    translate: boolean;
    click(): void;
    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
}
Run Code Online (Sandbox Code Playgroud)

Cha*_*Kim 1

更新*

e.target是一个 HTMLElement,但不保证它具有该value属性。

尝试将 event.target 转换为 HTML 元素以确保它是 HTMLInputElement

(<HTMLInputElement>e.target).value
Run Code Online (Sandbox Code Playgroud)

参考: https: //angular.io/guide/user-input#! #type-the--*event *


旧答案*

尝试使用类型断言:current as HTMLElement

我可以看到elementis HTMLElement,但是,您应该检查current. 我看不到井的初始化,current因为它被错误消息窗口隐藏了。