【问题标题】:Reference a TS interface from jsDoc从 jsDoc 引用一个 TS 接口
【发布时间】:2020-09-04 02:42:27
【问题描述】:

由于 jsDoc 表示法和 tsconfig.json 文件,使用 VSCode 几乎可以从 Typescript 中获得纯 .js 的好处:

{
  "compileOnSave": false,
  "compilerOptions": {
    "noEmit": true,
    "allowJs": true,
    "checkJs": true,
    "target": "es6",
    "resolveJsonModule": true,
    "moduleResolution": "node",

  },
  "include": ["index.js", "./src"]
}
/**
 * @return {Promise<string>}
 */
const foo = Promise.resolve('hi');
module.exports = foo;

现在,是否可以在node_modules 处引用d.ts 中定义的接口?特别是我正在返回一个 -let's call- "my_dependency.Storage" 对象,但我无法使用纯 javascript 引用它:

/**
 * @param {Storage} storage
 */
const goo = storage => ...

会明白我指的是来自lib.dom.d.ts的Web Storage API

  • 等效的打字稿是:
import {Storage} from "my_dependency"
///<reference path="node_modules/my_dependency/lib/index.d.ts" />
  • 我期待类似(伪代码)
/**
 * @param {my_module.Storage} storage
 */

【问题讨论】:

  • 在某些情况下import('firebase').app.App,这是 TS 2.9 的功能。它可能对您的事业有所帮助。我在我的 JS/TS 项目中使用过一次。
  • @Akxe 直到现在才得到您提到的内容。这正是我正在寻找的语法。谢谢。用一段代码来回答我自己的问题

标签: javascript typescript visual-studio-code


【解决方案1】:

正如@Akxe 提到的,这是从库中引用类型的方法:

/**
 * @param {import("my_dependency").Storage} storage
 */
const goo = storage => ...

现在,我发现自己一遍又一遍地重复这句话,所以我创建了一个环境别名,如下所示:

types.d.ts

declare namespace MyProject {
  type St = import("my_dependency").Storage; // alias: reference my_dependency.Storage from plain js code
}

index.js

/// <reference path="types.d.ts"/>
...

src/foo.js

/**
 * @param {MyProject.St} storage
 */
const goo = storage => ...

【讨论】:

  • 我喜欢这个别名,在哪里可以找到更多信息?
  • 我猜...this doc maybe?
猜你喜欢
  • 2021-09-04
  • 2020-07-23
  • 2021-06-09
  • 2021-08-14
  • 2023-01-10
  • 2020-02-21
  • 1970-01-01
  • 2019-07-31
  • 1970-01-01
相关资源
最近更新 更多