You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在React中对ChangeEvent与DragEvent进行类型收窄?

React 联合事件类型的类型收窄方案

我需要编写一个接收两种不同React事件类型的函数,参数类型为React.ChangeEvent<HTMLInputElement>或React.DragEvent<HTMLDivElement>,请问该如何对这个联合类型进行类型收窄?

初始函数代码如下:

function test(e: React.ChangeEvent<HTMLInputElement> | React.DragEvent<HTMLDivElement>) {
    console.log(e)
}

我尝试过用typeof来判断类型,但显然这种方式行不通。我原本想直接通过类型名称来区分,比如这样写:

function test(e: React.ChangeEvent<HTMLInputElement> | React.DragEvent<HTMLDivElement>) {
    if (typeof e === 'React.ChangeEvent<HTMLInputElement>') {
        const files = e.target.files;
    } else {
        const files = e.dataTransfer;
    }
} 

最终我找到了可行的解决方案:利用TypeScript的属性存在性检查来区分两种类型,代码如下:

function test(e: React.ChangeEvent<HTMLInputElement> | React.DragEvent<HTMLDivElement>) {
    if ('files' in e.target) {
        console.log(e.target.files);
    } else if ('dataTransfer' in e) {
        console.log(e.dataTransfer);
    }
}

内容的提问来源于stack exchange,提问作者Identikit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 09:48:14