javascript - 对象不工作的 JsDoc 联合类型

标签 javascript typescript jsdoc

我对此束手无策。似乎它应该可以工作,我已经为此苦苦挣扎了几个小时,但我不确定出了什么问题。这是我能想到的最小的例子。我什至有一个类型后卫。

/** @typedef {{ a: string }} TypeA*/
/** @typedef {{ b: string }} TypeB*/
/** @typedef {(TypeA | TypeB) } TypeC */

/** @type {TypeC} */
let typeC;

console.log(typeC.b) // autocompletion for property b doesn't work
我得到错误:
Property 'b' does not exist on type '{ a: string; } | { b: string; }'.
  Property 'b' does not exist on type '{ a: string; }'.ts(2339)

最佳答案

我发现一个 jsdoc 风格的类型保护可以让我访问 TypeC 的属性,如果我能够将其键入为 TypeB。

/** @typedef {{ a: string }} TypeA*/
/** @typedef {{ b: string }} TypeB*/
/** @typedef {(TypeA | TypeB) } TypeC */

/**
 * @param {*} value
 * @returns {value is TypeB}
 */
function typeIsB(value) {
  return true;
}

/** @type {TypeC} */
let typeC;

if (typeIsB(typeC)) {
  console.log(typeC.b) // no error, autocomplete works when typing typeC.b
}

自动完成工作的屏幕截图:
enter image description here

关于javascript - 对象不工作的 JsDoc 联合类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65294867/

相关文章:

javascript - 如何从具有 chrome 扩展名的事件选项卡中获取段落?

javascript - 我怎样才能以更精简的方式完成这个 jQuery 代码?

javascript - 从node.js中的其他文件调用函数和变量

javascript - 如何通过数据获取元素-...具有指定值

Angular 2 : Observable subscription not reading data correctly

带有 "callback type"的 TypeScript 索引类型约束工作不正常?

带有父路由参数的 Angular 延迟加载

javascript - 使用 JsDoc 转换 Typescript

javascript - 为什么这个对象字面量没有呈现给 JSDoc?

javascript - 如何为修改 String 原型(prototype)的内联函数正确编写 JSDoc?