javascript - Typescript skontrolovať, či je hodnota reťazec


Mám komponent:

export type IDAta = string | number | null;

interface IDAta {
  data?: string | number | null;
  verify: boolean;
}

const App: React.FC<IDAta> = ({
  data = '',
  verify = true,
}) => {

  if ((data || data === 0) {
    return (
      <div>
        {verify && isText(data) ? (
          <Child text={data} />
        ) : (
          data
        )}
      </div>
    );
  }

};

export default App;

Komponenty isText a Child očakávajú parametre iba ako reťazce, ale keď urobím toto verify && isText(data), potom dostanem chybu v TypeScripte ako Type 'number' is not assignable to type 'string'. . Toto sa dá vyriešiť nasledovne:

{
  verify && typeof data === 'string' && isText(data) ? ( 
  <Child text = {data as string}/>
  ) : (
    data
  )
}

Nie som si istý, či je toto riešenie v poriadku, pretože typeof data === 'string' zdvojnásobuje logiku z funkcie isText, ktorá vyzerá takto:

const isText = (data: string) => {
  return typeof data === 'string';
};

Otázka: Aké bude najlepšie riešenie na vyriešenie vyššie popísaného problému?

Odpoveď č. 1

Funkcia ochrany typu/predikát:

function isText(data: unknown): data is string {
  return typeof data === 'string';
};

Súvisiace články