提问人: 提问时间:11/12/2023 最后编辑:starball 更新时间:11/16/2023 访问量:40
为什么我的 JSDoc 类型定义与 VS Code 中的 null 联合的悬停不显示 null 作为联合的一部分?
Why does the hover for my JSDoc type definition unioning with null in VS Code not show null as part of the union?
问:
我使用 JSDoc 和 VSCode 中的类型检查进行了以下类定义。在其中,它应该显示 和 作为联合类型的类型,但未定义,但它没有,只显示它们的默认类型。LinkedList
jsconfig.json
value
next
class LinkedListNode {
/**
* @param {number | undefined} value
* @param {LinkedListNode | undefined} next
*/
constructor(value, next) {
/** @type {number} */
this.value = value ?? 0;
/** @type {LinkedListNode | null} */
this.next = next ?? null;
}
}
以下面这一行为例,认为它适用于所有工会。
/** @type {LinkedListNode | null} */
this.next = next ?? null;
悬停消息当前未正确显示:this.next
(property) LinkedListNode.next: LinkedListNode
我希望看到的:
(property) LinkedListNode.next: LinkedListNode | null
我尝试了以下方法,但没有一个奏效:
/** @type {LinkedListNode | null} */
/** @type {?LinkedListNode} */
/** @type {(LinkedListNode|null)} */
答:
事实证明,我忘记了一些重要的事情。
在我的我忘了放.事实证明,在这种情况下禁用了工会。jsconfig.json
"strict": true
nullish
因此,在将它放入我的 中并重新加载 VSCode 后,它现在在工具提示上正确显示联合。jsconfig.json
这个问题的提出者已经给出了一种正确的答案,那就是你可以使用 strict
属性在jsconfig.json的编译器选项中更改这种行为。
但他们错过了两件重要的事情:
该属性不是直接感兴趣的属性。感兴趣的实际配置属性是
strictNullChecks
,它默认为 if 设置为 ,否则默认为 。strict
true
strict
true
false
jsconfig.json实际上具有可在 VS Code 设置中配置的隐式默认值 - 特别是那些以 “” 开头的默认值(这是一个有点晦涩的事实,尽管在相关文档中有它存在的痕迹/提示)。此处感兴趣的特定设置是 ,默认为
true
。js/ts.implicitProjectConfig.
js/ts.implicitProjectConfig.strictNullChecks
因此,如果将其与问题中的问题描述拼凑在一起,首先要检查的是,您没有意外地将 VS Code 设置设置为 。js/ts.implicitProjectConfig.strictNullChecks
false
评论
* @param {LinkedListNode | null | undefined} next