javascript - 我应该从 HTMLProps<HTMLElement> 继承 react Prop 吗?

标签 javascript reactjs typescript inheritance react-props

我正在将 React 与 TypeScript 结合使用,我希望允许组件具有所有 HTML 属性。

interface MyComponentProps extends HTMLProps<HTMLElement> {

}

但是,有时我需要设置自定义 Prop 类型,例如 onClick:

interface MyComponentProps extends HTMLProps<HTMLElement> {
    onClick?: (count: number) => void
}

但是在 TypeScript 中,我无法更改子界面中已经存在的属性。有什么简单的解决方案吗?

我只是认为以下之一:

  • 定义我自己的父接口(interface)而不是 HTMLProps (需要在每个文件和许多自定义接口(interface)中额外导入)
  • 重命名我的自定义 Prop (是的,但我想使用常见的 Prop 名称,如 onClickdata 而不是 onComponentClick_data)

最佳答案

你可以尝试这样的事情。首先,定义您的 Prop ,然后从 HTMLProps 中省略它们,然后将您的 Prop 与它合并。

interface OverrideProps {
  onClick?: (count: number) => void;
}

type Omit<T, K> = Pick<T, Exclude<keyof T, K>>;

type MyComponentProps = Omit<
  React.HTMLProps<HTMLElement>,
  keyof OverrideProps
> &
  OverrideProps;

关于javascript - 我应该从 HTMLProps<HTMLElement> 继承 react Prop 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57858391/

相关文章:

内存中的 Javascript 压缩。 Post 后在 Python 中解压。还必须处理非 ascii

javascript - 从 Lambda 函数内更新 CloudFormation 堆栈的正确方法是什么?

javascript - 数字和字符串全局对象的用途?

javascript - 如何使用Hook API风格

reactjs - 如何在拦截器中使用 Axios cancelToken?

javascript - 如何在reactjs es6中删除监听器

javascript - 导出时输入 "only refers to a type, but is being used as a value here"

typescript - 从 CLI 执行时,Cypress 环境变量会选择多个值。如何在Cypress测试中传递多个环境变量?

javascript - Angular 5 - 如何重定向到具有特定 header 的外部 URL?

javascript - Puppeteer:无法注入(inject)全局变量