typescript正确的svg组件类型作为prop传递

vnzz0bqm  于 2022-12-14  发布在  TypeScript
关注(0)|答案(2)|浏览(153)

我正在构建一个按钮组件:

interface ButtonProps {
   startIcon?: ... <-- what type?
}

const Button = ({startIcon: StartIcon}) => {
   return <button>{StartIcon && <StartIcon/>}</button>
}

// usage
<Button startIcon={SomeIcon}/>

我正在使用react-icons库,我应该在接口中声明什么类型?如果我以startIcon prop的形式传递svg元素,对类型声明有影响吗?

c90pui9n

c90pui9n1#

您的图标类型为FunctionComponent,因此您只需从react库导入即可:

import React, {FunctionComponent} from 'react';
// rest of the codes ...

interface ButtonProps {
  startIcon?: FunctionComponent 
}
可选

您可以使用简单的console.logtypeof方法检查变量的类型。
假设这个简单的组件:

const SampleComponent = () => <p>Hello</p>

现在检查类型:

console.log(SampleComponent);
console.log(typeof SampleComponent) // function

现在,检查图标类型(从react-icons导入),其与上述结果完全相似。

o8x7eapl

o8x7eapl2#

我迟到了,但对其他人可能有帮助

您可以在功能组件中定义svg图标的类型,如

export interface IconProps {
  style?: StyleProp<ViewStyle>;
  fill?: string;
  width?: number;
  height?: number;
  text?: string;
  fill_1?: string;
  fill_2?: string;
  fill_3?: string;
  fill_4?: string;
}

interface ButtonProps {
startIcon?: ({ fill, width, height, style }: IconProps) => JSX.Element;
}

const Button = ({startIcon: StartIcon}:ButtonProps) => {
   return <button>{StartIcon && <StartIcon/>}</button>
}

//Usage
<Button startIcon={SomeIcon}/>

相关问题