1

我正在尝试将 jsDoc 用于我的 mobx-state-tree 驱动的应用程序,但它并没有按照我想要的方式做出反应。

Visual Studio 代码没有向我显示相应类型的正确属性:

vs-code 列出了错误的属性

jsDoc 在重构和保持 js 代码无缺陷方面提供了巨大的帮助!但是在这种情况下我该如何利用它呢?

我发现了这个,但似乎没有人真正使用它: https ://github.com/Feverqwe/mst-jsdoc-gen

我真的很想知道其他开发人员是如何处理这个问题的!

4

2 回答 2

1

问题是您的 jsDoc 不是指类型的实例,而是指类型本身。

试试这个:

/**
 * @param {typeof Step.Type} step
 */
async applyStep(step){}

或者这个(正如文档的打字稿部分所指出的那样):

/**
 * @param {Instance<typeof Step>} step
 */
async applyStep(step){}
于 2019-11-20T09:42:14.630 回答
0

您的项目可能缺少一个将jsconfig.json定义为 Visual Studio Code 的 Javascript 项目

例如,给定项目树

.
├── jsconfig.json
├── package-lock.json
├── package.json
├── src
│   ├── step.js
│   └── test.js
└── yarn.lock

Injsconfig.json定义如下,

{
    "compilerOptions": {
      "module": "commonjs",
      "target": "es6"
    },
    "include": ["src/**/*"],
    "checkJs": true,
    "allowSyntheticDefaultImports": true
}

allowSyntheticDefaultImports配置很重要,因为它允许在项目的 Javascript 模块中未导出的符号的代码提示。

添加 jsconfig.json 时显示代码提示

要获得 mobx 状态树模型的类型提示,可以显式记录typedef. 例如,

import { types } from "mobx-state-tree"


const Step = types.model({
    level: types.number,
    strength: types.number
})

 /**
 * @typedef Step
 * @property {Number} level
 * @property {Number} strength
 */

typedef 之后的 mobx-state-tree 模型的类型提示

我认为人们可以更进一步编写一个typedef为模型动态生成此文档的钩子。

我不知道有什么工具可以立即执行此操作。

您可以分叉您共享的工具,对其进行更新,然后在 Visual Studio Code 中配置一个自定义任务,以便在模型更新时运行它。

于 2019-11-16T13:15:04.047 回答