Error typescript usando componentes de react de la biblioteca: TS2769

Tengo un CRA inyectado con electrones que he estado tratando de convertir archivos .js de .jsx a .ts durable.tsx. Los pasos que seguí son:

  1. añadir un archivo tsconfig.json a mi directorio raíz de proyecto.
  2. npm instalar varios @types/** dependencias
  3. añadir ts-loader y fuente-map-loader a webpack.config.js
  4. cambiar la extensión de archivo al proceso principal de electrones: electron.js y proceso de renderizado: renderer.js a .tsx respectivamente

Mientras soy capaz de ejecutar la aplicación con npm start con sólo cambiar mi archivo de proceso principal: electron. Js a electron. ts así como el archivo de proceso del renderizador: renderer.js a renderer.tsx, No puedo resolver problemas y conflictos que ocurren al convertir mis otros archivos fuente. Los siguientes son los pasos que haría para intentar convertir un archivo .js en un archivo .tsx:

  1. Rename .js file a .tsx file
  2. Reinicie la aplicación con npm start
  3. Pase y corrija los problemas de tipografía, ya sea compilando errores o no definiendo tipos para el corrector de tipo.

Levántate y repite

Este es un problema específico que he encontrado con varios intentos de convertir un .js a un archivo fuente .tsx:

//MyNav.tsx
import * as React from 'react';
import {Navbar, Nav, Collapse} from 'react-bootstrap';
import {Link} from 'react-router-dom';

const MyNav:React.FC<{}> = () => {
  return(
    
      BRAND
      
      
        
      
    
    );
  }
  
export default MyNav;

Y este es el componente padre que tiene un componente MyNav

//App.js <- it is still currently a .js file, I have not changed it to a .tsx
import React from 'react';
import MyNav from './MyNav';
import {HashRouter, Switch, Route} from 'react-router-dom';
import DashboardPage from './DashboardPage';

function App() {
  //...

  return (
    
); } export default App;

Y el error que obtengo al convertir MyNav.tsx:

[Tsl] C:\Users\kde-embed-soft-dev\Projects\kde-origin-connect\src\MyNav.tsx(28,5) [0] TS2769: Ninguna sobrecarga coincide con esta llamada. [0] La última sobrecarga dio el siguiente error. [0] Argumento del tipo '{ bg: string; expand: "lg"; __self: undefinido; __source: { fileName: string; lineNumber: number; columnNumber: number; }; }' no se asigna al parámetro del tipo 'Atributos & NavbarProps'. [0] Objeto literal sólo puede especificar propiedades conocidas, y '__self' no existe en el tipo 'Atributos & NavbarProps'.

La primera línea me dice el número de línea que debería ir a mirar pero apunta a una línea que parece no sensorial en términos de apuntar al error real.

Más información sobre la configuración de mi proyecto, todavía estoy aprendiendo sobre webpack, pero he puesto las reglas para buscar archivos .tsx y .tsx para usar con ts-loader así como tomar archivos .js en source-map-loader cargador (aunque no estoy viendo un archivo .map en ningún lugar de mi proyecto).

He creado un tsconfig básico. archivo json que se ve así:

{
  "compileOnSave": true,
  "compilerOptions": {
    "target": "es5",
    "lib": [
      "dom",
      "dom.iterable",
      "esnext"
    ],
    "allowJs": true,
    "skipLibCheck": true,
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "strict": true,
    "forceConsistentCasingInFileNames": true,
    "noFallthroughCasesInSwitch": true,
    "module": "esnext",
    "moduleResolution": "node",
    "resolveJsonModule": true,
    "isolatedModules": false,
    "noEmit": false,
    "jsx": "react",
    "outDir": "./dist/",
    "noImplicitAny": false,
    "sourceMap": true,
    "mapRoot": "./dist",
    "types": ["node"],
    "baseUrl": "./"
  },
  "exclude": ["dist", "node_modules", "user_data", "scripts"],
  "include": ["src", "electron"]
}

y las dev-dependencias para tipos parecen así en mi package.json archivo:

//package.json
{
//...
  "devDependencies": {
    "@types/node": "^14.14.14",
    "@types/react": "^17.0.0",
    "@types/react-bootstrap": "^0.32.25",
    "@types/react-dom": "^17.0.0",
    "@types/react-router": "^5.1.8",
    "@types/react-router-dom": "^5.1.6",
    "electron": "^10.1.3",
    "electron-builder": "^22.8.1",
    "electron-devtools-installer": "^3.1.1",
    "electron-rebuild": "^2.0.3",
    "react-test-renderer": "^17.0.0",
    "ts-loader": "^8.0.12",
    "typescript": "^4.1.3",
    "webpack-cli": "^4.1.0"
  }
}

Empecé con módulos tipo hoja, archivos que no dependen de otros. Luego me mudé a un módulo que tenía una dependencia y los mensajes de error se volvieron vagos con números de línea de error que no coincidían con mi archivo, o incluso pasadas las líneas totales en el archivo. Entiendo (o tal vez no) que el error debe estar refiriéndose al archivo tsx compilado, pero no puedo encontrar/saber dónde existe ese archivo en mi proyecto.

Pregunta

  1. ¿Por qué no soy capaz de utilizar React componentes de bibliotecas como React Bootstrap, es decir, qué me perdí/completamente no hacer para resolver el error de coincidir con la sobrecarga. No entiendo lo que el __self representa en el mensaje de error.
  2. ¿Por qué estoy obteniendo el número de línea incorrecto con los mensajes de error, qué podría no haber hecho correctamente / perdido en habilitar el typescript en mi aplicación electrónica de CRA inyectada?
  3. Cuando configura la webpack, ¿voy a tener problemas añadiendo en cargadores como lo hice cuando el CRA expulsado tiene babel/otros cargadores ya en?

Gracias por su tiempo y esfuerzo.

Pregunta hecha hace 3 años, 4 meses, 27 días - Por daniel1


2 Respuestas:

  • El error que estás experimentando (TS2769) se debe a que TypeScript no reconoce la estructura de propiedades que estás pasando al componente <Navbar> de React Bootstrap. Para resolver esto, necesitas ajustar la forma en que pasas las propiedades al componente para que coincida con la interfaz esperada por el componente.

    En tu archivo MyNav.tsx, en la sección donde defines el componente <Navbar>, debes corregir las propiedades que estás pasando. A continuación te muestro cómo debería lucir esa sección corregida:

    tsx
    import * as React from 'react';
    import {Navbar, Nav, Collapse} from 'react-bootstrap';
    import {Link} from 'react-router-dom';
    
    const MyNav: React.FC<{}> = () => {
      return(
        
          
            BRAND
          
          
          
            
          
        
      );
    }
    
    export default MyNav;
    

    En este fragmento de código, he corregido el uso de las propiedades para el componente <Navbar> según la sintaxis y las propiedades esperadas por React Bootstrap. Asegúrate de que todas las propiedades que estás pasando coincidan con la interfaz definida para el componente.

    Respecto a tus otras preguntas:

    • Respecto a los números de línea incorrectos en los mensajes de error, a veces TypeScript puede tener dificultades para mapear exactamente dónde se produce el error debido a la transformación que realiza el compilador TypeScript. Sin embargo, el mensaje de error en sí debería darte un indicio sobre qué parte del código está causando el problema.
    • Al configurar Webpack con TypeScript, es importante asegurarse de que los cargadores (loaders) estén correctamente configurados para manejar los archivos TypeScript. Asegúrate de que estás utilizando `ts-loader` para procesar los archivos TypeScript y que la configuración de Webpack incluya las extensiones `.tsx` y `.ts`.

    Espero que estas sugerencias te ayuden a solucionar el problema con el componente de React Bootstrap y a entender mejor los mensajes de error en TypeScript. Si necesitas más ayuda, ¡no dudes en preguntar!

    Respondida el Dec 19, 2020 a las 23:05 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • 1. Error de sobrecarga

    El error sugiere que estás pasando un objeto literal con una propiedad __self a un componente que no la espera. La propiedad __self es un campo sintético añadido por el compilador TypeScript y no debe utilizarse directamente en el código.

    Para resolver este error, debes asegurarte de que estás pasando los accesorios correctos al componente <Navbar>. Consulta la documentación de React Bootstrap para obtener información sobre los accesorios requeridos y opcionales.

    2. Números de línea de error incorrectos

    Es posible que los números de línea de error incorrectos se deban a que no has configurado correctamente los mapas de origen. Los mapas de origen permiten al compilador TypeScript asociar los archivos TypeScript originales con los archivos JavaScript compilados, lo que proporciona números de línea precisos en los mensajes de error.

    Para habilitar los mapas de origen, asegúrate de que has añadido la siguiente configuración a tu archivo tsconfig.json:

    
    "sourceMap": true,
    "mapRoot": "./dist/"
    

    También debes asegurarte de que estás utilizando un cargador de mapas de origen en tu configuración de Webpack.

    3. Cargadores de Webpack

    El uso de cargadores como ts-loader y source-map-loader no debería interferir con los cargadores existentes en la configuración de Webpack predeterminada de CRA. Sin embargo, debes asegurarte de que los cargadores estén configurados correctamente y que estén ejecutandose en el orden correcto.

    Configuraciones adicionales

    Además de las configuraciones mencionadas anteriormente, también debes asegurarte de lo siguiente:

    Tu archivo tsconfig.json está en el directorio raíz de tu proyecto. Has instalado las declaraciones de tipo correctas para tus dependencias.

    • Estás utilizando la última versión de TypeScript y React.

    Si sigues teniendo problemas, puedes intentar proporcionar un ejemplo mínimo y reproducible de tu código para que podamos depurarlo más a fondo.

    Respondida el Dec 19, 2020 a las 23:12 - por Gemini

    Votos positivos: 0 | Votos negativos: 0