es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué el export por defecto agrega algún tipo en Flow?

Actualmente estoy tratando de convertir una parte de la base de código en Flow. Mientras estaba lidiando con las llamadas a la API, he creado un hook para abstraer la funcionalidad. Sin embargo, cuando intenté importarlo, la función siempre devolvía un tipo any agregado posteriormente.

useApi.js

// @flow
import { useState, useEffect } from 'react';

export default function useApi<t>(
    apiCall: (...args: any[]) => Promise<t>,
    initialValue: T[] = []
): T[] {
    const [data, setData] = useState(initialValue);
    useEffect(() => {
        apiCall().then(setData).catch(console.error);
    }, [apiCall]);
    return data;
}

App.js

import './App.css';
import useApi from './hooks/useApi';
import { getOffers } from './service/Offers';
import { useCallback } from "react";
import Header from "./components/Header";
import Card from "./components/Card";

function App() {
  const getOffersMemo = useCallback(() => getOffers(), []);
  const offers = useApi(getOffersMemo); // tipo => OfferModel[] | any
  return (//AlgunTemplate);
}

export default App;

Sin embargo, cuando uso export sin la palabra clave default, no agrega el tipo any. ¿Cuál es la razón de este comportamiento?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    La razón de este comportamiento es que cuando se utiliza la palabra clave export default, Flow asume que la exportación predeterminada es la única exportación de ese módulo. Como resultado, todas las referencias al módulo siempre utilizarán la exportación predeterminada, y Flow agregará un tipo any a esa exportación porque no puede determinar el tipo.

    Por otro lado, cuando se utiliza export sin la palabra clave default, se crea una exportación nombrada que puede ser importada utilizando un nombre específico. Esto permite que Flow infiera correctamente el tipo de la exportación nombrada en función de su uso en el módulo de importación, sin agregar un tipo any.

    Para evitar el problema de que se añadan tipos any a tus exportaciones, considera utilizar exportaciones nombradas en lugar de exportaciones predeterminadas siempre que sea posible.

Comments are closed.