В настоящее время я работаю/поддерживаю устаревшие приложения js/react, где нет возможности переработать их в typeript, поэтому я включаю jsDoc как существующую систему типов времени разработки для JS.
Модуль Typescript npm создан jsDoc, useDuck возвращает золотой век Redux под 70LOC. Этот модуль является основным вариантом использования во время разработки, когда помогает вашему сложному состоянию оставаться типобезопасным.
const [state, quack] = useDuck(reducer, initialState, actionsMap);
jsdoc-утка
Мой опыт работы с машинописным текстом углубился, когда я создал облегченную библиотеку npm для реагирования на состояние: response-state-factory
User declared state and actions types -> useStateFactory -> [state, dispatchedActoionCollection]
После того, как я начал использовать несколько аннотаций jsDoc для облегчения своих работ, следующий шаг был немного более амбициозным: переработать этот модуль в jsDoc. На первый взгляд это невыполнимая миссия. Но после нескольких недель, потраченных на понимание jsDoc, я увидел некоторый свет в конце туннеля.
В какой-то момент я обнаружил жесткое ограничение возможностей jsDoc: когда я пытаюсь написать функцию редуктора, результатом является шарлатанство, но, конечно же, она запускает пустой {}. Таким образом, только в конце запуска редуктора создается правильный Quack, потому что этот тип интересуется, содержит ли объект весь запрошенный ключ. Итак, эту проблему до сих пор я не могу решить. Если кто-нибудь может дать хорошую идею, как я могу ее решить, поделитесь со мной или присоединитесь к разработке этого модуля в качестве соавтора.
Сначала я создаю один js-файл, содержащий все необходимые jsDoc @typedef, рано или поздно это заработает. И в этот момент я думаю, что это всего лишь один шаг, чтобы создать для них модуль узла.
Но печальный факт: модуль npm, содержащий экспортированные типы, не работает только с jsDoc, поэтому обязательно скомпилировать d.ts, чтобы в конце модуля jsDoc не указывали 100% JS, вместо этого при сборке также используется машинописный текст.
Как вы заметили на форуме dev.to, подсветка синтаксиса не распознает jsDoc. Другие неправильные вещи: @typedef в моем тесте просто работает, если вы пишете одну строку, и это противоречит чистому коду.
В моем следующем сообщении в блоге я напишу конкретный вариант использования этой библиотеки: сортировка: упрощение и типизация обработки состояния реагирования с помощью 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 */
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3