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 的智能感知)认为 x
是 any
。
我想要智能感知 x
上的类型定义和调用 x.propName
但 MyInterface
没有 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 = ...;
我有一个混合 TS/JS 项目 - 最终我们将完成完整的 TS,但目前还有很长的路要走。
同时,我们在 JS 文件和 <script>
标签中使用 // @ts-check
指令,它们非常强大。
我想在JS文件中引用一些TS定义,像这样:
// @ts-check
/// <reference path="MyInterface.d.ts" />
/** @type {MyInterface} */
let x = ...
只有这个不起作用 - TS 类型检查(和 VS2017 的智能感知)认为 x
是 any
。
我想要智能感知 x
上的类型定义和调用 x.propName
但 MyInterface
没有 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 = ...;