【问题标题】:How to get VS Code to understand JSDOC's @typedef across multiple files如何让 VS Code 跨多个文件理解 JSDOC 的 @typedef
【发布时间】:2018-01-31 20:58:48
【问题描述】:

我想在一个文件中指定一个类型,并能够在另一个文件中重用它。我尝试了modules,但它在 VS Code 中不起作用。还有其他解决方案吗?只是想让我的项目的所有类型都可以重用,这样我就可以跨文件在不同的函数中引用它们。 This is the closest question我找到了。

【问题讨论】:

    标签: visual-studio-code jsdoc


    【解决方案1】:

    我在 Visual Studio Code 1.33.1 的纯 JavaScript 项目中使用 jsconfig.json 及其 include 属性取得了一些成功

    {
      "include": [
        "src/**/*.js"
      ]
    }
    

    给定以下 JavaScript 项目:

    src/
    ├── types/
    |   ├── person.js
    |   ├── question.js
    |
    ├── answer.js
    ├── jsconfig.json
    

    question.jsperson.js 都是类型定义:

    person.js

    /**
     * @typedef {object} Person
     * @property {string} firstName
     * @property {string} lastName
     */
    

    question.js

    /**
     * @typedef {object} Question
     * @property {Person} askedBy
     * @property {string} text
     */
    

    answer.js 是一个接受问题并返回答案的函数:

    /**
     * Takes a question and return an answer
     * @param {Question} question 
     */
    function answer(question) {
      return 42;
    }
    

    正如您在第一个截屏视频中看到的那样,当我将鼠标悬停在 Question 类型符号上时,我确实获得了 IntelliSense 支持:

    除此之外,IntelliSense 现在还能够根据我的类型定义提供代码完成:

    【讨论】:

    【解决方案2】:

    Since TypeScript 2.9 嵌入在较新的 VS 代码中,可以通过在 JSDoc 中使用 import 语法,像这样

    /**
     * @typedef {import("koa").Context} Context
     *
     * @typedef {Object} BodyparserOptions
     * @prop {(ctx: Context) => boolean} [detectJSON] Custom json request detect function. Default `null`.
     */
    

    VS Code 也应该选择工作区中定义的所有类型。

    【讨论】:

    • 如果你在很多文件中这样做,你最终会得到一大串Context typedefs。每次您尝试导入Context 时,自动完成都会显示此列表,不清楚该选择哪一个:(
    猜你喜欢
    • 1970-01-01
    • 2018-02-01
    • 2018-03-08
    • 1970-01-01
    • 2017-08-28
    • 1970-01-01
    • 1970-01-01
    • 2017-11-20
    • 2019-08-11
    相关资源
    最近更新 更多