Traduccion del archivo src/rewards/index.js a TypeScript#53
Open
Migueldsc12 wants to merge 4 commits intoUSB-CI3715:f24from
Open
Traduccion del archivo src/rewards/index.js a TypeScript#53Migueldsc12 wants to merge 4 commits intoUSB-CI3715:f24from
Migueldsc12 wants to merge 4 commits intoUSB-CI3715:f24from
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Traduccion del archivo src/rewards/index.js a TypeScript
Miguel Salomon (19-10274)
Idea principal
La idea principal de este pull request es convertir el archivo index.js a en un archivo TypeScript, generando asi index.ts en la misma ubicacion.
Proceso
Se analizo el archivo original index.js para identificar las funciones clave y las estructuras de datos implicadas.
Se reviso las dependencias e importaciones para asegurar su compatibilidad con TypeScript.
Identifiqué y prioricé las áreas donde la falta de tipos explícitos podría haber llevado a posibles errores o falta de claridad.
Creación del nuevo archivo:
Generé index.ts en el mismo directorio que el archivo original.
Definición de tipos:
Definí las interfaces Reward, RewardData, Params y DbObject, aclarando la estructura de los objetos
utilizados en el módulo.
Tipé correctamente los parámetros y valores de retorno de las funciones asíncronas, evitando el uso excesivo de any.
Usé Promise para las funciones que no retornan valores explícitos pero que realizan acciones asíncronas.
Tipé correctamente las interacciones con la base de datos (resultados de db.getObjects, db.isSetMember, etc.) para evitar la manipulación de tipos desconocidos.
Actualicé las importaciones y exportaciones al formato de módulos de ES6.
Modifiqué las funciones para que utilicen tipos explícitos, eliminando el uso de any en la medida de lo posible.
Manejo de tipos any:
En los casos donde fue necesario, utilicé tipos más específicos o unknown en lugar de any para mayor
seguridad. Esto asegura que el código sea más robusto y menos propenso a errores durante la ejecución.
Gestión de errores del compilador:
Ataque errores reportados por el compilador de TypeScript realizando ajustes en el código. Esto incluyó la
tipificación adecuada de variables, parámetros y retornos de funciones asíncronas.
En casos donde las dependencias externas (como db y plugins) aún no estaban completamente tipificadas, utilicé anotaciones como // @typescript-eslint/no-unsafe-member-access y @typescript-eslint/no-unsafe-call para suprimir advertencias y errores sin perder el control de los tipos dentro del código.
Gestión de promesas:
Aseguré que todas las promesas en el código estuvieran correctamente manejadas con async/await o utilizando bloques .then().catch() en las pruebas para evitar errores por promesas rechazadas que no eran manejadas, lo que podría generar timeouts en las pruebas.
Cambios Adicionales:
Implementé la captura de errores usando bloques try/catch en las funciones clave que interactúan con la
base de datos y los plugins, para mejorar la resiliencia del código.
Pruebas:
Utilizamos el comando
npx tscpara compilar el codigo y generar el archivo JavaScript equivalente a esta conversion.Realizamos el test de eslint con el comando
npm run lintpara verificar errores de estilos y sintaxis.Realizamos el test de pruebas con el comando
npm run test, el cual encontro errores con el manejo de las promesas:Error: Timeout of 25000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.Luego de bastante investigacion, no pude dar con una solucion ya que al parecer es un error con el manejo de los test y las promesas.Finalmente
Este proceso ha permitido que el archivo index.ts sea más legible, seguro y fácil de mantener, manteniendo la funcionalidad original.
Se soluciona el issue #2