reactjs - typescript korrekt typ för svg-komponent som passerats som prop
Jag bygger en knappkomponent:
interface ButtonProps {
startIcon?: ... <-- what type?
}
const Button = ({startIcon: StartIcon}) => {
return <button>{StartIcon && <StartIcon/>}</button>
}
// usage
<Button startIcon={SomeIcon}/>
Jag använder react-icons-biblioteket, vilken typ bör jag ange i interfacet? Spelar det någon roll för typdeklarationen om jag skickar ett svg-element som startIcon-prop?
Svar #1
Typen på dina ikoner är FunctionComponent så du kan helt enkelt importera det från react-biblioteket:
import React, {FunctionComponent} from 'react';
// rest of the codes ...
interface ButtonProps {
startIcon?: FunctionComponent
}
Valfri
Du kan kontrollera typen av dina variabler med en enkel console.log och typeof metod.
Anta denna enkla komponent:
const SampleComponent = () => <p>Hello</p>
Kontrollera nu typen:
console.log(SampleComponent);
console.log(typeof SampleComponent) // function
Nu, kontrollera ikonens typ (importerad från react-icons), den är helt liknande det ovanstående resultatet.
Svar #2
Jag är sen men det kan vara till hjälp för andra
Du kan definiera typ av SVG-ikon i en funktionell komponent som
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}/>
