Pada masa ini saya sedang mengusahakan/mengekalkan aplikasi js/react warisan, di mana tiada pilihan untuk mengolah semula ke taip, jadi sebab itu saya menghidupkan jsDoc sebagai sistem jenis masa pembangunan yang wujud untuk JS.
Modul npm typescript dibuat oleh jsDoc, useDuck mengembalikan zaman keemasan redux di bawah 70LOC. Kes kegunaan utama modul ini dalam masa pembangunan, apabila membantu keadaan kompleks anda kekal selamat.
const [state, quack] = useDuck(reducer, initialState, actionsMap);
jsdoc-duck
Pengalaman saya dengan skrip taip menjadi lebih mendalam apabila saya mencipta pustaka npm keadaan tindak balas ringan: react-state-factory
User declared state and actions types -> useStateFactory -> [state, dispatchedActoionCollection]
Selepas saya mula menggunakan beberapa anotasi jsDoc untuk membantu kerja saya, langkah seterusnya adalah lebih bercita-cita tinggi: kerjakan semula modul ini kepada jsDoc. Pada pandangan pertama ini adalah misi yang mustahil. Tetapi selepas menghabiskan beberapa minggu untuk memahami jsDoc, saya nampak sedikit cahaya di hujung terowong.
Di bawah titik tertentu saya menemui had keras keupayaan jsDoc, apabila saya cuba menulis fungsi pengurang, di mana hasilnya ialah Quack tetapi sudah tentu ia memulakan {} kosong. Jadi hanya penghujung larian pengurang mencipta Quack yang betul kerana jenis itu ingin tahu tentang objek mengandungi semua kunci yang diminta. Jadi masalah ini sehingga sekarang saya tidak dapat menyelesaikannya, jika ada yang boleh memberi idea yang baik bagaimana saya boleh menyelesaikannya sila kongsi dengan saya atau sertai pembangunan modul ini sebagai kolaborator.
Pada mulanya saya mencipta satu fail js yang mengandungi semua jsDoc @typedef yang perlu, lambat laun ini akan berfungsi. Dan pada masa itu saya fikir hanya satu langkah untuk mencipta modul nod untuk mereka.
Tetapi fakta yang menyedihkan, pada modul npm yang mengandungi jenis yang dieksport tidak berfungsi dengan jsDoc sahaja, jadi wajib untuk menyusun d.ts jadi pada penghujung modul jsDoc jangan sebutkan 100% JS sebaliknya binaan menggunakan skrip taip juga.
Seperti yang anda kenali dalam forum dev.to, sorotan sintaks tidak mengenali jsDoc. Perkara lain yang salah ini @typedef dalam ujian saya hanya berfungsi jika anda menulis satu baris, jadi ia bertentangan dengan kod bersih.
Dalam catatan blog saya yang seterusnya, saya akan menulis ialah kes penggunaan konkrit perpustakaan ini, susun: permudahkan dan taipkan pengendalian keadaan tindak balas dengan 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<AM, { type: T }> extends { payload: infer P } ? (payload: P) => void : () => void }} Quack */ /** * @template ST - State * @template AM - Actions Map * @typedef {(state: ST, action: AM) => ST} Reducer */
Atas ialah kandungan terperinci pencarian modul npm jsDoc. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!