为什么我的 JSDoc 类型定义与 VS Code 中的 null 联合的悬停不显示 null 作为联合的一部分?

问题描述 投票:0回答:2

我有以下

LinkedList
类定义,使用 JSDoc 和
jsconfig.json
在 VSCode 中进行类型检查。在其中,它应该将
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)} */
javascript typescript visual-studio-code jsdoc
2个回答
0
投票

事实证明,我忘记了一些重要的事情。

在我的

jsconfig.json
中我忘记放入
"strict": true
。在这种情况下,结果会禁用
nullish
联合。

因此,将其放入我的

jsconfig.json
并重新加载 VSCode 后,它现在可以在工具提示上正确显示联合。


0
投票

这个问题的提问者已经给出了一种正确的答案,即您可以使用 strict 属性

jsconfig.json 的编译器选项中更改此行为。

但是他们错过了两件重要的事情:

  1. strict
    财产并不直接是感兴趣的财产。真正感兴趣的配置属性是
    strictNullChecks
    ,如果 true 设置为
    strict
    ,则
    defaults
    true
    ,否则默认为
    false

  2. jsconfig.json 实际上具有可在 VS Code 设置中配置的隐式默认值 - 特别是那些以“

    js/ts.implicitProjectConfig.
    ”开头的默认值(有点晦涩难懂,但有记录)。这里感兴趣的特定设置是
    js/ts.implicitProjectConfig.strictNullChecks
    默认为
    true

因此,如果您将其与问题中的问题描述结合在一起,首先要检查的是您是否意外地将

js/ts.implicitProjectConfig.strictNullChecks
VS Code 设置设置为
false

© www.soinside.com 2019 - 2024. All rights reserved.