JavaScript变量能否作为JSDoc类型?代码相关疑问解析
关于TodoMVC vanilla-es6示例中JSDoc类型与Empty对象的疑问解答
1. JSDoc中使用变量作为类型的合法性
你没理解错,JSDoc确实支持直接引用代码里定义的变量作为类型标记,这属于类型引用用法,并非只能在注释里定义类型。
如果代码中已经定义了Empty这类变量(通常是一个冻结的空对象),JSDoc可以直接用它的名称标注其他变量的类型,意思是被标注的变量结构和Empty完全一致。这种方式能把类型定义和实际值绑定,既避免重复编写相同的类型结构,也能保证类型与运行时值的一致性。
2. 为何用Empty对象而非直接赋值{}
直接写{}和复用Empty常量的核心区别有三点:
- 引用一致性与全等判断:每次写
{}都会生成新的空对象,多个{}的内存引用不同,没法用===判断是否为“空状态”。而Empty是全局唯一的冻结对象,所有需要表示空状态的地方复用同一个引用,判断高效且准确。 - 不可变性:这类
Empty对象一般会用Object.freeze()冻结,能防止代码中意外修改空对象的属性,避免隐性bug。直接用{}的话,对象是可修改的,可能被误操作改变结构。 - 语义可读性:
Empty的命名比直接写{}更具语义性,一眼就能明白这个变量代表“空”状态,代码的可读性和维护性更高。
内容的提问来源于stack exchange,提问作者aderchox
相关产品推荐
相关产品推荐

