【问题标题】:VSCode JSDoc of PromiseVSCode JSDoc of Promise
【发布时间】:2020-11-05 14:36:08
【问题描述】:
const promise = new Promise((resolve) => {
    resolve('string');
});

“承诺”变量的类型是Promise<any>,而它应该是Promise<string>。我可以让它自动识别 resolve() 中的内容吗?我可以在 docblock 中手动描述类型,但是在 resolve() 中放置了一个非常复杂的对象,我希望它使用自动生成的 doc。

【问题讨论】:

  • 如果你只想要一个值的承诺,那么 Promise 构造函数上有一个用于此目的的静态方法:const foo = Promise.resolve("some string");。使用它可能会使静态分析更容易,也可能不会。

标签: javascript visual-studio-code jsdoc


【解决方案1】:

如果您没有围绕该承诺的帮助者,我认为您不需要自动找出您要解决的问题。

您可以创建自己的“自己的类型”并将它们传递给 Promise,如下所示:D

/**
 * @typedef {{name: "John", lastName: "Doe", age: "infinite"}} MyComplicatedObject
 * @type {Promise<MyComplicatedObject>}
 */
const promise = new Promise(resolve => {
    resolve({ name: 'John', lastName: 'Doe', age: 'infinite' });
});

您不需要重新键入它们,也可以在其他文件的 jsdoc 注释中 import 它们,就像您从 js 导入任何其他文件一样。

如果您想自动检测 resolve 将要解决的问题,您可以使用该 promise 的助手:

/**
 * @template resT
 * @param {resT} whatToResolve
 * @returns {Promise<resT>}
 */
const myPromise = whatToResolve => {
    return new Promise(resolve => {
        resolve(whatToResolve);
    });
};

【讨论】:

  • 感谢您的回答。我的用例实际上是,我调用了一些外部方法并想用它来解决承诺。 const promise = new Promise((resolve) =&gt; { resolve(MyClass.method()); });。我如何让 VSCode 正确显示“承诺”的类型是 Promise&lt;{...}&gt; 而不是 Promise&lt;any&gt;。 MyClass.method() 附加了一个适当的 JSdoc(它是自动生成的。
猜你喜欢
  • 1970-01-01
  • 2018-12-27
  • 2019-03-01
  • 1970-01-01
  • 2019-02-12
  • 1970-01-01
  • 2021-11-23
  • 2020-09-05
  • 1970-01-01
相关资源
最近更新 更多