Atualmente estou trabalhando/mantendo aplicativos js/react legados, onde não há opção de retrabalhar para typeript, por isso estou ativando o jsDoc como sistema de tipo de tempo de desenvolvimento existente para JS.
O módulo Typescript npm é feito por jsDoc, useDuck traz de volta a era de ouro do redux sob 70LOC. Este módulo é o principal caso de uso em tempo de desenvolvimento, quando ajuda seu estado complexo a permanecer seguro.
const [state, quack] = useDuck(reducer, initialState, actionsMap);
jsdoc-pato
Minha experiência com TypeScript foi um pouco mais profunda quando criei uma biblioteca npm de estado de reação leve: react-state-factory
User declared state and actions types -> useStateFactory -> [state, dispatchedActoionCollection]
Depois que comecei a usar algumas anotações jsDoc para ajudar em meus trabalhos, o próximo passo é um pouco mais ambicioso: retrabalhar este módulo para jsDoc. À primeira vista esta é uma missão impossível. Mas depois de passar algumas semanas para entender o jsDoc, vi alguma luz no final do túnel.
Horror do sistema de tipo: redutorOutra armadilha: nenhum tipo de módulo sem TS
Mas o triste fato é que no módulo npm que contém tipos exportados não funciona apenas com jsDoc, então é obrigatório compilar um d.ts para que no final do módulo jsDoc não diga 100% JS, em vez disso, a construção também usa TypeScript.
@typedef no módulo jsdoc-duck
Na minha próxima postagem do blog, escreverei o caso de uso concreto desta biblioteca, classificar: simplificar e digitar com segurança o tratamento do estado de reação com useReducer.
/**
* @template T – Tipo de carga útil
* @typedef {T estende { tipo: inferir U, carga útil?: inferir P } ? { tipo: U, carga útil ?: P }: nunca} ActionType
*/
// @ts-ignorar
/** @template AM - Mapa de ações @typedef {{ [K in AM['type']]: K }} Rótulos */
// @ts-ignorar
/** @template AM - Mapa de ações @typedef {{ [T in AM["type"]]: Extract
/** * @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 */
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3