Recibo este error al llamar a una función de TypeScript en un proyecto React.

const handleLanguageChange = React.useCallback((eventKey: eventKey) => {
          setLanguage(eventKey);
          if(eventKey == "DE")
               setCurrency("€ EUR");
          else if(eventKey == "JP")
               setCurrency("¥ JPY");
          else if(eventKey == "US")
               setCurrency("$ USD");
          else
               setCurrency("£ GBP");
          const language = eventKey;
          changeLang(language);  >> ERROR HERE!
     }, []);

function changeLang(language: string) {
          i18n.changeLanguage(language, (err, t) => {
               if (err) {
                    localeChangeHandlerMetric.setFailure();
               } else {
                    localeChangeHandlerMetric.setSuccess();
               }
               localeChangeMetricsPublisher.publish(localeChangeHandlerMetric);
          });
     }

Este es el error que recibo:

src/components/navigation/LanguageNav.tsx:44:22
TS2345: Argument of type 'eventKey' is not assignable to parameter of type 'string'.
  Type 'null' is not assignable to type 'string'.
    42 |                setCurrency("£ GBP");
    43 |           const language = eventKey;
  > 44 |           changeLang(language);
       |                      ^^^^^^^^
    45 |      }, []);
    46 | 
    47 |      function changeLang(language: string) {

¿Alguna idea de cómo lidiar con esto? Intenté agregar un tipo opcional a eventKey, pero no tuve éxito.

1
Dext1232 14 mar. 2021 a las 08:56

1 respuesta

La mejor respuesta

Usted changeLang (idioma: cadena) recibe el idioma como tipo cadena. Pero pasa el lenguaje como tipo eventKey. Algunas opciones que puedes hacer

Opción 1: Cambiar tipo de eventKey

const handleLanguageChange = React.useCallback((eventKey: string) => {
          setLanguage(eventKey);
          if(eventKey == "DE")
               setCurrency("€ EUR");
          else if(eventKey == "JP")
               setCurrency("¥ JPY");
          else if(eventKey == "US")
               setCurrency("$ USD");
          else
               setCurrency("£ GBP");
          const language = eventKey;
          changeLang(language);  
     }, []);

Opción 2 : escriba afirmación con la palabra clave "como"

const handleLanguageChange = React.useCallback((eventKey: eventKey) => {
          setLanguage(eventKey);
          if(eventKey == "DE")
               setCurrency("€ EUR");
          else if(eventKey == "JP")
               setCurrency("¥ JPY");
          else if(eventKey == "US")
               setCurrency("$ USD");
          else
               setCurrency("£ GBP");
          const language = eventKey as unknown as string;
          changeLang(language); 
     }, []);

Opción 3: ignórela.

const handleLanguageChange = React.useCallback((eventKey: eventKey) => {
          setLanguage(eventKey);
          if(eventKey == "DE")
               setCurrency("€ EUR");
          else if(eventKey == "JP")
               setCurrency("¥ JPY");
          else if(eventKey == "US")
               setCurrency("$ USD");
          else
               setCurrency("£ GBP");
          const language = eventKey;
          //@ts-ignore
          changeLang(language); 
     }, []);

1
Vo Quoc Thang 14 mar. 2021 a las 13:11