如何将 jsDoc 与 mobx-state-tree 一起使用?

How can I use jsDoc with mobx-state-tree?

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

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

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

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

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

您的项目可能缺少 jsconfig.json defines it to be a Javascript project to Visual Studio Code

例如,给定项目树

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

jsconfig.json中定义如下,

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

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

要获得 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 文档。

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

您可以分叉您共享的工具,然后在模型更新时更新它 configure a custom task in Visual Studio Code to run it

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

试试这个:

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

或者这个(正如 docs 的打字稿部分所指出的):

/**
 * @param {Instance<typeof Step>} step
 */
async applyStep(step){}