从jsDoc引用一个TS接口

Man*_*anu 12 javascript typescript visual-studio-code

.js借助 jsDoc 表示法和文件,使用 VSCode 几乎可以从 Typescript 中受益tsconfig.json

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

  },
  "include": ["index.js", "./src"]
}
Run Code Online (Sandbox Code Playgroud)
{
  "compileOnSave": false,
  "compilerOptions": {
    "noEmit": true,
    "allowJs": true,
    "checkJs": true,
    "target": "es6",
    "resolveJsonModule": true,
    "moduleResolution": "node",

  },
  "include": ["index.js", "./src"]
}
Run Code Online (Sandbox Code Playgroud)

现在,是否可以引用 at 中定义的d.ts接口node_modules?特别是我返回一个“my_dependency.Storage”对象,但我无法使用普通的 javascript 引用它:

/**
 * @return {Promise<string>}
 */
const foo = Promise.resolve('hi');
module.exports = foo;
Run Code Online (Sandbox Code Playgroud)

会明白我指的是 Web Storage APIlib.dom.d.ts

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

Man*_*anu 21

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

/**
 * @param {import("my_dependency").Storage} storage
 */
const goo = storage => ...
Run Code Online (Sandbox Code Playgroud)

现在,我发现自己一遍又一遍地重复该语句,因此我创建了一个环境别名,如下所示:

类型.d.ts

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

索引.js

/// <reference path="types.d.ts"/>
...
Run Code Online (Sandbox Code Playgroud)

src/foo.js

/**
 * @param {MyProject.St} storage
 */
const goo = storage => ...
Run Code Online (Sandbox Code Playgroud)

==编辑==

这是dev.to 上的一篇文章扩展了这个主题