You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用JSDoc语法实现TypeScript中的标记类型(品牌类型)?

用JSDoc实现区分不同数字类型的标记类型功能

可以用JSDoc实现类似TypeScript标记类型的效果,在开发阶段区分不同语义的数字类型,具体写法如下:

1. 定义带标记的数字类型

通过@typedef结合@property给原始number类型添加一个虚拟的标记属性,以此区分不同类型:

/**
 * @typedef {number} MilliSeconds
 * @property {'MilliSeconds'} _tag 用于区分毫秒类型的标记(仅用于类型检查,运行时不存在)
 */

/**
 * @typedef {number} MicroSeconds
 * @property {'MicroSeconds'} _tag 用于区分微秒类型的标记(仅用于类型检查,运行时不存在)
 */

2. 使用标记类型

在变量、函数参数或返回值上用@type标注定义好的类型,支持JSDoc的IDE(如VS Code)会提供类型校验:

/** @type {MilliSeconds} */
const timeout = 100;

/** @type {MicroSeconds} */
const delay = 100000;

// 错误示例:将MicroSeconds赋值给MilliSeconds会触发类型警告
/** @type {MilliSeconds} */
const invalidAssignment = delay;

这种方式和TypeScript的交叉类型实现逻辑一致:都是通过添加唯一标记属性来实现标称类型的区分,运行时变量本质还是普通数字,但开发阶段能有效避免不同语义数字的混用。

内容的提问来源于stack exchange,提问作者Paul Irish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 16:00:10