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

如何在TSX组件中正确实现...rest语法?

解决React TSX组件中...rest语法的类型报错问题

你的问题出在组件的Props接口未包含HTML元素的原生属性。IParent仅定义了children,但你传入的style属于div元素的原生属性,TypeScript因此抛出类型不匹配的错误。

正确实现方式

让组件的Props类型继承React提供的HTMLAttributes<HTMLDivElement>,这样会自动包含所有div元素的原生属性(如style、className等),无需手动逐一声明:

import { HTMLAttributes } from "react";

// 继承div元素的所有标准属性,自动包含children
interface IParentProps extends HTMLAttributes<HTMLDivElement> {
  // 如需自定义额外属性,在此添加即可
}

function Container({ children, ...rest }: IParentProps) {
  return <div {...rest}>{children}</div>;
}

export default function App() {
  return (
    <Container style={{ border: "1px solid red" }}>
      <h1>Hello World!</h1>
    </Container>
  );
}

简化写法(无需自定义接口)

如果不需要额外的自定义属性,甚至可以直接用HTMLAttributes<HTMLDivElement>作为参数类型,省去接口定义步骤:

import { HTMLAttributes } from "react";

function Container({ children, ...rest }: HTMLAttributes<HTMLDivElement>) {
  return <div {...rest}>{children}</div>;
}

export default function App() {
  return (
    <Container style={{ border: "1px solid red" }}>
      <h1>Hello World!</h1>
    </Container>
  );
}

原理说明

React为所有HTML元素提供了对应的属性类型,HTMLAttributes<HTMLDivElement>包含了div元素的全部标准属性,TypeScript能据此正确校验传入的props,同时...rest可以安全解构出除children外的其他属性,传递给底层的div元素。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 06:00:17