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

TypeScript JSX中是否存在可复用的通用HTMLElement基础类型定义?

问题

我现在在TypeScript/JSX里使用一个没有附带TypeScript声明文件的Web组件(刚接触TS和JSX)。但不想用文档里提到的[elemName: string]: any;这种宽松的声明:

declare global { 
    namespace JSX { 
        interface IntrinsicElements {
            [elemName: string]: any;
        } 
    }
};

也不想用下面这种只开放任意属性的调整版本:

interface IntrinsicElements {
    "my-external-component": {[attribute: string]: any};
}

我希望能有一个通用的HTMLElement类型,像这样交叉声明:

interface MyExternalComponent {
    "api-key": string
}

declare global { 
    namespace JSX { 
        interface IntrinsicElements {
            "my-external-component": MyExternalComponent & BaseHTMLElement;
        } 
    } 
}; 

这个类型需要包含所有官方HTMLElement的属性键值对。请问有没有类似BaseHTMLElement的现成类型?是不是需要自己定义?或者有没有可复用的通用声明?

解决方案

1. 直接使用React内置的标准属性类型

TypeScript和React已经内置了包含所有通用HTML属性的类型,无需自行定义:

  • 通用HTML元素属性可以用**React.HTMLAttributes<HTMLElement>**,它涵盖了id、className、style、所有标准事件处理函数(如onClick、onChange)等通用属性。

    用法示例:

    interface MyExternalComponent {
        "api-key": string;
    }
    
    declare global { 
        namespace JSX { 
            interface IntrinsicElements {
                "my-external-component": MyExternalComponent & React.HTMLAttributes<HTMLElement>;
            } 
        } 
    }; 
    

2. 针对特定原生元素的属性类型

如果你的Web组件是基于某个具体原生元素(如<div>、<input>)开发的,可以用更精准的类型,比如:

  • React.DivHTMLAttributes<HTMLDivElement>(对应<div>的专属属性)
  • React.InputHTMLAttributes<HTMLInputElement>(对应<input>的专属属性,如type、value)

3. 自定义基础类型(可选)

如果需要扩展或过滤通用属性,也可以基于内置类型封装自己的BaseHTMLElement:

// 自定义包含通用HTML属性+额外自定义属性的基础类型
type BaseHTMLElement = React.HTMLAttributes<HTMLElement> & {
    "data-common"?: string; // 添加自定义通用属性
};

// 后续使用
interface MyExternalComponent {
    "api-key": string;
}

declare global { 
    namespace JSX { 
        interface IntrinsicElements {
            "my-external-component": MyExternalComponent & BaseHTMLElement;
        } 
    } 
}; 

这种方式既实现了自定义组件属性的强类型检查,又保留了标准HTML属性的类型提示与校验,完全避免了any带来的类型安全问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 04:45:33