"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Búsqueda del módulo jsDoc npm

Búsqueda del módulo jsDoc npm

Publicado el 2024-11-02
Navegar:537

jsDoc npm module quest

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.

TLDR;

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

Camino a mecanografiar en jsDoc

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]

Probando los límites de jsDoc

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.

Horror del sistema tipo: reductor

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.

Otra trampa: no hay tipos en el módulo sin TS

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.

@typedef en el módulo jsdoc-duck

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"]]: Extract extends { payload: infer P } ? (payload: P) => void : () => void }} Quack */

/**
 * @template ST - State
 * @template AM - Actions Map
 * @typedef {(state: ST, action: AM) => ST} Reducer
 */
Declaración de liberación Este artículo se reproduce en: https://dev.to/pengeszikra/jsdoc-npm-module-quest-2f7a?1 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

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