【发布时间】:2021-04-04 01:27:06
【问题描述】:
我正在创建一个对 TypeScript 友好的 NPM 包,但我无法将常见的 HTML 属性作为 className 和 style 等道具传递给我的组件。我希望不必通过扩展具有所有所需道具的界面来手动将每个属性添加到我的道具列表中。我的简化组件如下所示:
import React, { Key, ReactElement } from "react";
interface MyComponentProps extends React.HTMLAttributes<HTMLDivElement> {
customText: string;
uniqueKey?: Key;
}
export function MyComponent({uniqueKey, customText, ...props}: MyComponentProps): ReactElement {
return (
<div key={uniqueKey} {...props}>{customText}</div>
);
}
我创建了一个uniqueKey 属性,因为它不能只命名为key(与ref 相同)。我尝试扩展 props 参数以将任意道具传递给我的组件,但它似乎没有任何区别。我将此组件导入我的项目并尝试将其称为:
<MyComponent customText="Hello World" uniqueKey={123} className="myClass" />
我收到错误:Property 'className' does not exist on type 'MyComponentProps'.
我希望这会起作用,因为MyComponentProps 扩展了HTMLAttributes,它具有我想要的道具,例如className 和style。
我的index.d.ts 文件如下所示:
import React, { Key, ReactElement } from "react";
interface MyComponentProps extends React.HTMLAttributes<HTMLDivElement> {
customText: string;
uniqueKey?: Key;
}
export declare function MyComponent({ uniqueKey, customText, ...props }: MyComponentProps): ReactElement;
export {};
【问题讨论】:
标签: reactjs react-props react-functional-component