Actualmente estoy trabajando/manteniendo aplicaciones js/react heredadas, donde no hay opción para volver a trabajar en typeript, por eso enciendo jsDoc como sistema de tipos de tiempo de desarrollo existente para JS.
El módulo npm Typescript está creado por jsDoc, useDuck recupera la edad de oro de redux por debajo de 70LOC. Este módulo es el principal caso de uso en tiempo de desarrollo, cuando ayuda a que su estado complejo se mantenga seguro.
const [state, quack] = useDuck(reducer, initialState, actionsMap);
jsdoc-pato
Mi experiencia con el mecanografiado fue un poco más profunda cuando creé una biblioteca npm de estado de reacción liviana: reaccionar-state-factory
User declared state and actions types -> useStateFactory -> [state, dispatchedActoionCollection]
Después de comenzar a utilizar algunas anotaciones jsDoc para ayudar en mis trabajos, el siguiente paso es un poco más ambicioso: volver a trabajar este módulo en jsDoc. A primera vista se trata de una misión imposible. Pero después de pasar algunas semanas entendiendo jsDoc, vi algo de luz al final del túnel.
En cierto punto encontré un límite estricto de la capacidad de jsDoc, cuando intento escribir una función reductora, donde el resultado es un Quack pero, por supuesto, comienza con un {} vacío. Entonces, solo el final de la ejecución del reductor creó el Quack adecuado porque ese tipo tiene curiosidad acerca de que el objeto contenga toda la clave solicitada. Entonces, este problema hasta ahora no puedo resolverlo. Si alguien puede darme una buena idea de cómo puedo resolverlo, compártalo conmigo o únase al desarrollo de este módulo como colaborador.
Al principio creo un único archivo js que contiene todos los jsDoc @typedef necesarios, tarde o temprano esto funcionará. Y ese es el momento, creo que solo queda un paso para crear un módulo de nodo para ellos.
Pero lo triste es que el módulo npm que contiene tipos exportados no funciona solo con jsDoc, por lo que es obligatorio compilar un d.ts para que al final del módulo jsDoc no diga 100% JS, sino que la compilación también use mecanografiado.
Como reconoce en el foro dev.to, el resaltado de sintaxis no reconoce el jsDoc. Otras cosas incorrectas: este @typedef en mi prueba solo funciona si escribes una sola línea, por lo que va en contra del código limpio.
En mi próxima publicación de blog escribiré el caso de uso concreto de esta biblioteca, ordenar: simplificar y escribir con seguridad el manejo del estado de reacción con useReducer.
/** * @template T - Payload Type * @typedef {T extends { type: infer U, payload?: infer P } ? { type: U, payload?: P } : never} ActionType */ // @ts-ignore /** @template AM - Actions Map @typedef {{ [K in AM['type']]: K }} Labels */ // @ts-ignore /** @template AM - Actions Map @typedef {{ [T in AM["type"]]: Extractextends { payload: infer P } ? (payload: P) => void : () => void }} Quack */ /** * @template ST - State * @template AM - Actions Map * @typedef {(state: ST, action: AM) => ST} Reducer */
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3