reactjs - TypeScript: Tarkoittelitko kutsua tätä lauseketta?


Minulla on React-komponentti, joka vaatii string-tyyppisen propin. Minulla on myös funktio, joka palauttaa string-tyypin, sen tyyppi on (value: any): string.

Kun yritän siirtää sen komponentilleni <Component stringProp={myFunction("value")} />, saan virheen:

Type '(value: any) => string' is not assignable to type 'string'.ts(2322)

Miten minun pitäisi kirjoittaa tyyppi myFunction -funktiolle tai käyttää funktiota propissa? En halua kutsua sitä komponentin ulkopuolella, jos mahdollista.

Vastaus #1

Ehdotan, että käytät interface näin, koska tällä tavalla voit käsitellä propiasi ja voit välittää sille funktion tai merkkijonon :

interface Props {
 YOUR_PROP_NAME : (value? : any) => string | string
};

ja käytä sitä komponentissasi

const App : React.FC<Props> = (props) => {
    return (
        <>
            {typeof props.YOUR_PROP_NAME  === "string" ? <div>{props.YOUR_PROP_NAME}</div> :  <div>{props.YOUR_PROP_NAME()}</div>}
        </>
    );
};

export default App;

Vastaus #2

Minusta näyttää siltä, että ongelmasi on seuraava. Olet määrittänyt, että komponenttisi hyväksyy string-tyypin propina, mutta annat sille funktion. Sinun täytyisi päivittää props-rajapinta niin, että se ei odota merkkijonoa, vaan funktiota, joka palauttaa merkkijonon. Se näyttäisi jotakuinkin tältä.

interface Props {
    getString: (value: any) => string;
}

Nyt komponenttisi ei odota merkkijonoa, vaan funktiota, joka vastaa tyyppiä, jonka annat siihen.

Aiheeseen liittyviä artikkeleita