svg 组件的打字稿正确类型作为道具传递

Posted

技术标签:

【中文标题】svg 组件的打字稿正确类型作为道具传递【英文标题】:typescript correct type for svg component passed as prop 【发布时间】:2021-12-09 12:29:16 【问题描述】:

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

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


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


// usage
<Button startIcon=SomeIcon/>

我正在使用react-icons 库,我应该在接口中声明什么类型?如果我将 svg 元素作为 startIcon 属性传递,它对类型声明有影响吗?

【问题讨论】:

我相信 react-icons 提供了一个 IconType 类型,可以在这里解决问题 【参考方案1】:

你的图标类型是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 导入),它与上面的结果完全相似。

【讨论】:

以上是关于svg 组件的打字稿正确类型作为道具传递的主要内容,如果未能解决你的问题,请参考以下文章

在打字稿中将 useState 作为道具传递

通用打字稿组件继承组件道具

需要至少一个道具传递给组件[打字稿] [重复]

如何在带有打字稿的反应功能组件中定义自定义道具?

打字稿反应组件中的反应/道具类型eslint错误

从字符串 => 类型的映射推断反应道具类型时修复打字稿警告