tengo un componente:
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; isText y el componente Child esperan que los parámetros solo sean una cadena, pero al hacer esto, verify && isText(data) , luego obtengo un error en mecanografiado como Type 'number' is not assignable to type 'string'. . Esto podría resolverse de la siguiente manera:
{ verify && typeof data === 'string' && isText(data) ? ( <Child text = {data as string}/> ) : ( data ) } No estoy seguro de si esta solución está bien, porque typeof data === 'string' duplica la lógica de la función isText que se ve así:
const isText = (data: string) => { return typeof data === 'string'; };Pregunta: ¿Cuál será la mejor solución para resolver el problema descrito anteriormente?
Una función de guardia/predicado de tipo :
function isText(data: any): data is string { return typeof data === 'string'; };