ts-check JS 文件中的引用定义

Reference definition from ts-check JS file

我有一个混合 TS/JS 项目 - 最终我们将完成完整的 TS,但目前还有很长的路要走。

同时,我们在 JS 文件和 <script> 标签中使用 // @ts-check 指令,它们非常强大。

我想在JS文件中引用一些TS定义,像这样:

// @ts-check
/// <reference path="MyInterface.d.ts" />

/** @type {MyInterface}  */
let x = ...

只有这个不起作用 - TS 类型检查(和 VS2017 的智能感知)认为 xany

我想要智能感知 x 上的类型定义和调用 x.propNameMyInterface 没有 propName.

时的警告

我知道我可以用 JS 文档 @typedef 替换 <reference path="MyInterface.d.ts" />,但是我有 很多 的定义文件并且不需要定义重复。

有什么方法可以使 @ts-check 引用 .d.ts 文件吗?

official recommendation是使用导入类型:

// @ts-check

/** @type {import("./MyInterface").MyInterface} */
let x = ...;

或者,您可以使用 @typedef 为导入的类型指定名称:

// @ts-check

/** @typedef {import("./MyInterface").MyInterface} MyInterface

/** @type {MyInterface} */
let x = ...;