假设我有一个组件接口,应该扩展标准<div>
元素的接口。写法上有什么区别:
interface ComponentProps extends React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement> { ... }
相对于这个:
interface ComponentProps extends React.HTMLAttributes<HTMLDivElement> { ... }
假设我有一个组件接口,应该扩展标准<div>
元素的接口。写法上有什么区别:
interface ComponentProps extends React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement> { ... }
相对于这个:
interface ComponentProps extends React.HTMLAttributes<HTMLDivElement> { ... }
让我们创建ComponentProps
类型:
interface ComponentProps1 extends React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement> {}
interface ComponentProps2 extends React.HTMLAttributes<HTMLDivElement> {}
那么我们可以很容易地检查它们之间的差异:
type Dif = Omit<ComponentProps1, keyof ComponentProps2>;
Dif
类型是:
type Dif = {
ref?: LegacyRef<HTMLDivElement>;
key?: string | number;
}
DetailedHTMLProps
只包括key
和ref
吗?在 React 中,这些不是自动设置在类和函数组件上吗?我什么时候需要扩展DetailedHTMLProps
呢? - o01key
andref
are defined on react class and functional component but at the same time, they do not definedHtmlAttributes
. It is reasonable to use this type for allJSX.IntrinsicElements
. I think I would not extendDetailedHTMLProps
as it should be used as a wrapper for yourHtmlAttributes<Element>
- Marcin