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';
};
