javascript - 在 JavaScript 的类型文件中声明接口
问题描述
项目信息
我正在开发一个利用.d.ts
文件的 JavaScript 项目。这是我之前提出的问题的后续问题,因此您可以在此处查看有关该项目的更多信息。
问题
虽然我通常可以从类型文件中提取函数,但我无法提取为空或纯粹由接口组成的接口或命名空间。我通过const
为每个接口创建一个实现并@typeof ConstantImplementation
在评论中使用暂时解决了这个问题。请参见下面的示例:
// Typings File
export namespace test {
export interface ITest {
foo: string;
bar: number;
}
export const Test: ITest;
}
// JS File
if (undefined) var {Test: ITest} = require("globals.d.ts").test;
// Above line shows `unused var error`
/* @type {typeof ITest} */
var x = {};
x.foo = "hello";
x.bar = 3;
// if I do `x.` intellisense should suggest `foo` and `bar`
我想知道是否有更好的方法来解决这个问题,最好是一种不会引发错误的方法(使用eslint ignore line
不是修复方法)。
澄清
这个问题不是关于从类型文件中获取功能。这纯粹是为了让 VSCode 智能感知与类型接口一起工作。这是一张图片来解释我想要的是什么(圆圈内的两条线):
解决方案
所以我能够使用 JSDoc 解决这个问题
测试.d.ts
export namespace test {
export interface ITest {
foo: string;
bar: number;
}
}
测试.js
/**
* @type {import("./test").test.ITest}
*/
let x;
x.
智能感知现在有效
我还发现一件事是,如果您jsconfig.json
添加
jsconfig.json
{
"compilerOptions": {
"checkJs": true
}
}
你的智能进一步提高
更新 1
正如@nickzoum 所指出的,如果您定义test.d.ts
如下
export interface ITest {
foo: string;
bar: number;
}
export as namespace test;
然后你也可以在 JS 中使用下面的表单进行智能感知
/** @typedef {import("./test").ITest} ITest */
/** @type {ITest} */
var x = {};
x.
推荐阅读
- java - 需要澄清在 javafx 应用程序线程中更改数据
- database-design - 我应该为我的产品建立单独的表格吗?为什么不?
- office365 - 云端硬盘搜索在 Office 365 组中不起作用
- java - 扩展接口以更改合同,但不是 API
- vb.net - 如何在gridview windows窗体中更改单元格边框厚度的宽度?
- postgresql - 无法从我的 Linux 用户连接 PostgreSQL 数据库
- c# - 如何将 xaml 属性绑定到来自扩展的 DependencyProperty
- python-3.x - `python3`定义一个函数当`list[True, True, True]`时,当列表中存在`False`时返回`False`
- html - 如何使用填充垂直/水平居中 CSS 背景图像
- dax - 仅当上一季度访问过相同的客户 ID 时,如何明确计算在给定季度访问商店的客户 ID