jsDoc npm 模块任务

jsdoc npm 模块任务

目前我正在工作/维护遗留的 js/react 应用程序,没有办法重新工作到 typesript,这就是为什么我打开 jsdoc 作为 js 现有的开发时类型系统。

太长了;

typescript npm 模块由 jsdoc 制作,useduck 在 70loc 下带回了 redux 的黄金时代。该模块在开发时的主要用例,帮助您的复杂状态保持类型安全。

const [state, quack] = useduck(reducer, initialstate, actionsmap);

jsdoc-duck

从 typescript 到 jsdoc 之路

当我创建了一个轻量级的 react state npm 库时,我对 typescript 的体验更加深入了:react-state-factory

user declared state and actions types   -> usestatefactory   -> [state, dispatchedactoioncollection]

测试 jsdoc 限制

在我开始使用一些 jsdoc 注释来帮助我的工作之后,下一步有点更加大胆:将此模块重新设计为 jsdoc。乍一看,这是一项不可能完成的任务。但在花了几周时间了解 jsdoc 后,我看到了一些曙光。

千帆大模型平台 千帆大模型平台

面向企业开发者的一站式大模型开发及服务运行平台

千帆大模型平台 0 查看详情 千帆大模型平台

恐怖类型系统:减速机

在某个点上,当我尝试编写一个reducer函数时,我发现了jsdoc能力的硬限制,结果是一个quack,但当然它启动了一个空的{}。因此,只有reducer运行结束时才创建了正确的quack,因为该类型对包含所有请求的键的对象感到好奇。所以这个问题到现在我都无法解决,如果有人能给我一个好主意,我该如何解决它,请与我分享或作为合作者加入这个模块开发。

另一个陷阱:没有 ts 的模块中没有类型

一开始我创建了一个 js 文件,其中包含所有必要的 jsdoc @typedef,迟早它会起作用。这就是我认为为他们创建节点模块的一步。
但可悲的事实是,包含导出类型的 npm 模块不能仅与 jsdoc 一起使用,因此必须编译 d.ts,因此最后 jsdoc 模块不要说 100% js,而是构建也使用 typescript。

jsdoc-duck 模块中的@typedef

正如您在 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"]]: Extract extends { payload: infer P } ? (payload: P) => void : () => void }} Quack *//** * @template ST - State * @template AM - Actions Map * @typedef {(state: ST, action: AM) => ST} Reducer */

以上就是jsDoc npm 模块任务的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/457659.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月8日 02:08:46
下一篇 2025年11月8日 02:09:53

相关推荐

  • Go语言结构体中的空白字段与内存对齐详解

    本文深入探讨了go语言结构体中空白字段(`_`)的作用及其在内存管理中的意义。主要阐述了空白字段如何作为显式填充(padding)来确保内存对齐,尤其是在与c语言结构体进行互操作时保持布局一致性。文章通过示例代码解释了其工作原理,并强调了空白字段不可直接访问的特性,旨在帮助开发者更好地理解和利用go…

    2025年12月16日
    000
  • 深入理解Go结构体中的空白字段与内存对齐

    go语言结构体中出现的空白字段(`_`)并非用于存储可访问数据,其主要目的是实现内存对齐。这通常用于优化性能,或确保go结构体的内存布局与外部系统(如c语言)的结构体保持一致。空白字段作为填充物,不可直接访问,但对内存布局至关重要。 在Go语言中,结构体是一种复合数据类型,允许我们将不同类型的字段组…

    2025年12月16日
    000
  • Go 结构体中的空白字段 _:理解其在内存对齐中的作用

    go 结构体中的空白字段 `_` 主要用于内存对齐,作为填充物以优化数据访问性能或与外部接口(如 c 语言结构体)保持内存布局一致性。这些字段本身无法直接访问,其存在是为了满足特定的内存布局需求,而非存储可访问的数据。 Go 结构体中的空白字段 _ 概述 在 Go 语言中,结构体允许定义包含字段的复…

    2025年12月16日
    000
  • 深入理解 Go 结构体中的匿名字段与内存对齐

    go 语言结构体中的空白字段(`_`)主要用于内存对齐和填充,以优化数据访问性能或确保与外部系统(如 c 语言库)的内存布局兼容性。这些字段不绑定任何名称,因此无法直接访问,但它们占据内存空间,是实现精确内存控制的关键机制。 结构体中的空白字段:用途与原理 在 Go 语言中,结构体字段的定义有时会包…

    2025年12月16日
    000
  • 内存映射现有缓冲区到文件描述符的挑战与实践

    本文探讨了将现有内存缓冲区直接映射到文件描述符以避免数据复制的挑战。通过分析 `mmap` 和 `map_fixed` 的工作原理,阐明了为何这种直接映射通常不可行。文章指出,在需要文件描述符访问现有内存时,通常无法避免数据复制。为此,提供了一种基于共享内存 (`shm_open`) 和写入操作的实…

    2025年12月16日
    000
  • Go与C语言互操作:结构体及结构体数组的正确传递方法

    本文详细探讨了go语言与c语言之间传递结构体及结构体数组时常见的类型不匹配问题,特别是go `int`与c `int`在内存布局上的差异。文章提供了两种解决方案:显式类型匹配和更推荐的c类型别名方式,并结合示例代码,演示了如何安全有效地传递单个结构体、连续结构体数组以及结构体指针数组,旨在帮助开发者…

    2025年12月16日
    000
  • 在Go中安全高效地向C函数传递结构体与结构体数组

    本文详细探讨了go语言通过`cgo`向c函数传递结构体及结构体数组时常见的内存布局和类型不匹配问题。核心解决方案在于确保go与c之间的数据类型和内存对齐一致,特别是go `int`与c `int`尺寸的差异。文章推荐使用c类型别名来保证结构体布局的精确匹配,并提供了传递单个结构体和结构体指针数组的完…

    2025年12月16日
    000
  • Go与C结构体交互:解决cgo中结构体和结构体数组传递的内存对齐问题

    本文深入探讨了在go语言中使用cgo与c语言交互时,传递结构体及结构体数组所面临的内存布局和类型对齐挑战。通过分析go和c中int类型大小差异导致的结构体不匹配问题,文章提出了两种解决方案:显式类型尺寸对齐和更推荐的直接c类型别名方式,并提供了详细的代码示例,确保go与c之间数据传递的准确性和稳定性…

    2025年12月16日
    000
  • Go与C互操作:正确传递结构体及结构体数组

    本文深入探讨了Go语言通过cgo机制与C函数交互时,传递结构体及结构体数组的关键技术。核心问题在于Go和C语言中数据类型定义及内存布局的差异,特别是整数类型宽度不一致可能导致的内存错位。文章将详细介绍如何通过显式类型匹配或直接引用C类型定义来确保Go与C结构体之间的数据正确映射与传递,并提供示例代码…

    2025年12月16日
    000
  • Go语言通过CGO传递结构体与结构体数组:类型对齐与实践

    本文深入探讨了go语言通过cgo与c函数交互时,传递结构体及结构体数组的常见问题与解决方案。核心问题在于go和c之间的数据类型(尤其是int)大小不匹配以及结构体内存布局差异。文章推荐使用type gostruct c.cstruct进行类型对齐,并详细演示了如何安全有效地传递单个结构体和结构体指针…

    2025年12月16日
    000
  • Go与CGO:将C语言的unsigned char*转换为Go的[]byte

    本文详细介绍了在使用cgo集成c语言代码时,如何将c语言返回的`unsigned char*`数据有效地转换为go语言的`[]byte`类型。通过`unsafe.pointer`和`c.gostringn`函数,开发者可以安全且高效地处理跨语言的数据类型转换,确保c数据在go环境中正确使用。 在Go…

    2025年12月16日
    000
  • 将现有C代码集成到Go:处理unsigned char*并转换为[]byte

    本文旨在指导开发者如何在go语言中安全有效地集成c语言代码,特别是处理c语言中返回的`unsigned char*`类型数据,并将其转换为go语言的`[]byte`切片。文章将详细介绍如何利用`unsafe.pointer`和`cgo`提供的函数(如`c.gostringn`和`c.gostring…

    2025年12月16日
    000
  • Cgo 中嵌套匿名结构体的处理与访问

    本文探讨了在使用 cgo 调用包含嵌套匿名结构体的 c 语言库时遇到的挑战。核心问题在于如何正确访问这些嵌套结构体中的字段。通过分析 cgo 的内部转换机制和 go 语言的访问规则,本文阐明了 cgo 能够正确映射这些复杂结构,并提供了正确的 go 语言访问方式及调试建议,强调了 go 版本的重要性…

    2025年12月16日
    000
  • 深入理解CGO与C语言嵌套结构体:匿名成员的访问与Go语言映射

    本文旨在探讨go语言cgo机制在处理c语言嵌套结构体,特别是匿名结构体成员时的行为和正确访问方式。通过分析cgo如何将c语言结构体映射到go类型,并结合实际代码示例,详细阐述了在go中访问c语言复杂结构体成员的方法,并强调了go版本的重要性以及调试cgo生成代码的技巧。 CGO中C语言嵌套结构体的挑…

    2025年12月16日
    000
  • Cgo处理C语言嵌套结构体:Go语言中的正确姿势

    本文探讨了go语言通过cgo与c语言库交互时,如何正确处理复杂的嵌套结构体,特别是匿名结构体。文章详细解析了cgo将c结构体映射到go类型的机制,并提供了正确的字段访问方法。通过分析`go tool cgo`生成的类型定义,强调了go版本兼容性以及调试技巧在解决此类问题中的重要性,旨在帮助开发者高效…

    2025年12月16日
    000
  • Go语言中访问C结构体联合体成员的实践指南

    在go语言中通过cgo访问c语言结构体中的联合体成员时,由于go的类型安全机制,直接访问会遇到编译错误。本文将深入探讨如何利用go的`unsafe`包,通过指针算术或定义辅助结构体,安全且有效地处理这类内存布局不兼容问题,尤其是在与windows api交互时,提供两种实用的解决方案和注意事项。 理…

    2025年12月16日
    000
  • Cgo中处理C语言嵌套匿名结构体:深入解析与实践

    本文深入探讨了go语言通过cgo与c语言复杂数据结构交互时,特别是处理嵌套匿名结构体时的常见问题与解决方案。通过分析cgo的内部类型映射机制,我们阐明了如何正确访问c语言中定义的嵌套匿名结构体字段,避免编译错误,并提供了实际代码示例和调试技巧,以确保go程序能够准确、高效地操作c语言的复杂数据类型。…

    2025年12月16日
    000
  • Cgo 中处理嵌套结构体(含匿名成员)的实践指南

    在使用 cgo 桥接 go 与 c 语言时,处理包含匿名嵌套结构体的 c 结构体是一个常见挑战。本文将深入探讨 cgo 如何转换这些复杂的 c 类型到 go 类型,并提供一套清晰的实践方法,指导开发者正确地在 go 中访问 c 语言嵌套结构体(包括匿名成员)的字段,避免编译错误,确保数据交互的准确性…

    2025年12月16日
    000
  • 在Go语言中通过cgo访问C语言结构体中的联合体成员

    在go语言中,通过cgo访问c结构体中的联合体成员是常见挑战。本文将深入探讨如何利用go的unsafe包,提供两种实用解决方案:直接指针算术和通过定义go包装结构体进行类型转换,帮助开发者安全高效地处理c联合体。 理解C语言联合体与Go语言类型安全 在C语言中,union是一种特殊的数据结构,它允许…

    2025年12月16日
    000
  • Go语言中访问C语言结构体中的联合体成员:以Windows API为例

    在go语言中与c语言结构体(尤其是windows api中包含联合体`union`的结构体)交互时,直接访问联合体成员会遇到类型安全问题。本文将详细介绍如何使用go的`unsafe`包来解决这一挑战,提供两种访问策略:直接的指针算术和更推荐的包装结构体方法,并强调`unsafe`包的使用注意事项。 …

    2025年12月16日
    000

发表回复

登录后才能评论
关注微信