javascript - Text i JSX har typen 'string', men den förväntade typen för 'children' är 'string | Element | Element[]'
Jag har en anpassad React-knappkomponent som jag vill ska kunna ta valfria strängar med eller utan valfria ikoner (JSX.Element) som barn.
Mitt gränssnitt ser ut så här
interface IUploadFileButtonProps {
children: string | JSX.Element | JSX.Element[];
}
Och implementeringen:
// Does not work
<UploadFileButton>
<FaUpload />
Add new list
</UploadFileButton>
// Works
<UploadFileButton>
No icon, just text
</UploadFileButton>
// Works
<UploadFileButton>
<FaUpload />
</UploadFileButton>
// Works
<UploadFileButton>
<FaUpload />
<FaUpload />
</UploadFileButton>
Jag får detta felmeddelande:
Text i JSX har typen 'string', men den förväntade typen för 'children' är 'string | Element | Element[]'
Vilket jag antar beror på att Typescript förväntar sig en av typerna, men inte mer än en typ åt gången.
Hur kan jag specificera en valfri sträng och/eller valfria JSX-element som en typ (om det överhuvudtaget är meningsfullt)?
Jag skulle kunna hoppa av och använda any, men jag vill veta den korrekta typen för detta scenario.
Svar #1
Du kan använda React.ReactNode för att typa children-arrayen, varför definierar du din egen?
interface IUploadFileButtonProps {
children: React.ReactNode;
}
