reactjs - Hur man åtgärdar typen Type '(string | Element)[] är inte tilldelningsbar till typen 'string | Element | undefined' med hjälp av react och typescript?


jag vill lägga till lite marginal före etiketten och jag försökte göra det och fick fel Typ '(string | Element) [] kan inte tilldelas typ 'string | Element | undefined'

nedan är min kod,

type CheckboxProps = {
    label?: string;
}

const CheckboxComponent: React.FC<CheckboxProps> = ({
    label,
}) => {
    return (
        <>
            <input type="checkbox" />
            <Label>{label}</Label> 
        </>
    );
}


const ParentComponent = (data) => {
    const name = data.name;
    const type = data.type;
    const label = `${name} ${type}`;
    
    return (
        <Checkbox
            label = {label}
        />
        //some other logic
    );
}

Nu är problemet att jag vill lägga till lite marginal mellan kryssrutan och etiketten. Som du ser från koden ovan renderas etiketten inom kryssrute-komponenten och jag vill inte ändra marginalen för etiketten inom kryssrute-komponenten eftersom det är en återanvändbar komponent.

så jag försökte lösningen nedan och försökte lägga till marginal för etiketten i ParentComponent och ändrade typen på label i CheckboxProps-typen för att acceptera sträng eller Element.

type CheckboxProps = {
    label?: string | Element;
}

const ParentComponent = (data) => {
    const name = data.name;
    const type = data.type;
    const label = [<span style={{marginLeft: '4px'}}>${name}</span>, `${type}`];
    
    return (
        <Checkbox
            label = {label}
        />
        //some other logic
    );
}

Men koden ovan ger felet Typ '(string | Element)[]' kan inte tilldelas typen 'string | Element | undefined'

OBS: kryssrute-komponenten är en återanvändbar komponent och den accepterar etikett som sträng från andra komponenter. Endast ParentComponent skickar etikett som i koden ovan.

kan någon hjälpa mig med detta. hur man fixar typfel eller någon bättre lösning för att lägga till marginal. jag är ny på programmering. tack.

Svar #1

Konvertera label-typen i CheckboxProps till HTMLElement. Så prova detta för kryssrutan:

type CheckboxProps = {
    label?: HTMLElement;
}

const CheckboxComponent: React.FC<CheckboxProps> = ({
    label,
}) => {
    return (
        <>
            <input type="checkbox" />
            {label && (<Label>{label}</Label>)}
        </>
    );
}

Och detta för föräldrakomponenten:

const ParentComponent = (data) => {
    const name = data.name;
    const type = data.type;
    const label = <span style={{marginLeft: '4px'}}>${name} ${type}</span>;
    
    return (
        <Checkbox
            label = {label}
        />
        //some other logic
    );
}

Relaterade artiklar