Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio code 如何将jsDoc与mobx状态树一起使用?_Visual Studio Code_Jsdoc_Mobx State Tree - Fatal编程技术网

Visual studio code 如何将jsDoc与mobx状态树一起使用?

Visual studio code 如何将jsDoc与mobx状态树一起使用?,visual-studio-code,jsdoc,mobx-state-tree,Visual Studio Code,Jsdoc,Mobx State Tree,我试图在我的mobx状态树驱动的应用程序中使用jsDoc,但它的反应并不是我想要的 Visual studio代码未显示相应类型的正确属性: 当涉及到重构和保持js代码无bug时,jsDoc是一个巨大的帮助!但在这种情况下,我如何利用它呢 我发现了这个,但似乎没有人真正使用它: 我真的很想知道其他开发者是如何处理这个问题的 您的项目可能缺少一个jsconfig.json文件 例如,给定项目树 . ├── jsconfig.json ├── package-lock.json ├── pack

我试图在我的mobx状态树驱动的应用程序中使用jsDoc,但它的反应并不是我想要的

Visual studio代码未显示相应类型的正确属性:

当涉及到重构和保持js代码无bug时,jsDoc是一个巨大的帮助!但在这种情况下,我如何利用它呢

我发现了这个,但似乎没有人真正使用它:


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

您的项目可能缺少一个
jsconfig.json
文件

例如,给定项目树

.
├── 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
文档

我不知道有哪种工具能马上做到这一点


您可以使用共享的工具,然后在模型更新时进行更新

问题在于您的jsDoc不是引用类型的实例,而是引用类型本身

请尝试以下方法:

/**
 * @param {typeof Step.Type} step
 */
async applyStep(step){}
或者(如本手册的typescript部分所述):

/**
*@param{Instance}步骤
*/
异步applyStep(步骤){}

您正在使用typescript吗?不,我没有。我不想迁移我的项目…问题不是代码完成不起作用,问题是它显示了错误的完成结果(参见屏幕截图)。这与mobx状态树有很大关系(其他代码工作得非常好),您是正确的。我认为最接近的方法是手动显式地记录类型定义,或者是共享工具的更新版本,以及vscode中的自定义任务,以自动化该过程。
/**
 * @param {Instance<typeof Step>} step
 */
async applyStep(step){}