【发布时间】:2018-01-31 20:58:48
【问题描述】:
我想在一个文件中指定一个类型,并能够在另一个文件中重用它。我尝试了modules,但它在 VS Code 中不起作用。还有其他解决方案吗?只是想让我的项目的所有类型都可以重用,这样我就可以跨文件在不同的函数中引用它们。 This is the closest question我找到了。
【问题讨论】:
我想在一个文件中指定一个类型,并能够在另一个文件中重用它。我尝试了modules,但它在 VS Code 中不起作用。还有其他解决方案吗?只是想让我的项目的所有类型都可以重用,这样我就可以跨文件在不同的函数中引用它们。 This is the closest question我找到了。
【问题讨论】:
我在 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.js 和 person.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 现在还能够根据我的类型定义提供代码完成:
【讨论】:
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 时,自动完成都会显示此列表,不清楚该选择哪一个:(