jsDoc npm Modul-Quest

PHPz
Freigeben: 2024-08-30 19:06:25
Original
335 Leute haben es durchsucht

jsDoc npm module quest

Derzeit arbeite/warte ich ältere JS/React-Anwendungen, bei denen es keine Möglichkeit gibt, auf TypeScript umzuarbeiten, weshalb ich jsDoc als bestehendes Entwicklungszeit-Typsystem für JS einschalte.

TLDR;

Typescript npm-Module werden von jsDoc erstellt, useDuck bringt das goldene Zeitalter von Redux unter 70LOC zurück. Dieses Modul wird hauptsächlich in der Entwicklungszeit eingesetzt, um Ihrem komplexen Zustand dabei zu helfen, typsicher zu bleiben.

const [state, quack] = useDuck(reducer, initialState, actionsMap);
Nach dem Login kopieren

jsdoc-duck

Weg zum Typoskript zu jsDoc

Meine Erfahrungen mit Typoskript gingen etwas tiefer, als ich eine leichtgewichtige React-State-NPM-Bibliothek erstellt habe: React-State-Factory

User declared state and actions types -> useStateFactory -> [state, dispatchedActoionCollection]
Nach dem Login kopieren

Testen der jsDoc-Grenzwerte

Nachdem ich einige jsDoc-Annotationen zur Unterstützung meiner Arbeit verwendet habe, ist der nächste Schritt etwas ehrgeiziger: Überarbeiten Sie dieses Modul in jsDoc. Auf den ersten Blick ist dies eine unmögliche Mission. Aber nachdem ich ein paar Wochen damit verbracht hatte, jsDoc zu verstehen, sah ich etwas Licht am Ende des Tunels.

Horrortypsystem: Reduzierer

Ab einem bestimmten Punkt habe ich eine harte Grenze der jsDoc-Fähigkeit festgestellt, wenn ich versuche, eine Reduzierfunktion zu schreiben, bei der das Ergebnis ein Quack ist, aber natürlich ein leeres {} gestartet wird. Daher wurde erst am Ende des Reduziererlaufs der richtige Quack erstellt, da dieser Typ neugierig darauf ist, dass das Objekt alle angeforderten Schlüssel enthält. Daher kann ich dieses Problem bisher nicht lösen. Wenn jemand eine gute Idee hat, wie ich es lösen kann, teilen Sie es mir bitte mit oder nehmen Sie als Mitarbeiter an der Modulentwicklung teil.

Eine weitere Falle: Keine Typen im Modul ohne TS

Zu Beginn erstelle ich eine einzelne JS-Datei, die alle erforderlichen jsDoc @typedef enthält. Früher oder später wird dies funktionieren. Und das ist meiner Meinung nach nur ein Schritt, um ein Knotenmodul für sie zu erstellen.
Aber die traurige Tatsache ist, dass npm-Module, die exportierte Typen enthalten, nicht nur mit jsDoc funktionieren, daher ist es zwingend erforderlich, ein d.ts zu kompilieren, sodass am Ende des jsDoc-Moduls nicht 100 % JS angegeben wird, sondern der Build auch Typoskript verwendet.

@typedef im jsdoc-duck-Modul

Wie Sie im dev.to-Forum erkennen, erkennt die Syntaxhervorhebung das jsDoc nicht. Andere falsche Dinge: Dieses @typedef in meinem Test funktioniert nur, wenn Sie eine einzelne Zeile schreiben, also verstößt es gegen sauberen Code.

In meinem nächsten Blogbeitrag werde ich über den konkreten Anwendungsfall dieser Bibliothek schreiben: Sortieren: Vereinfachen und typsichern Sie die Handhabung des Reaktionsstatus mit 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 */
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonjsDoc npm Modul-Quest. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!