在JavaScript的类型文件中声明接口

问题描述 投票:8回答:3

项目信息

我正在使用.d.ts文件的JavaScript项目中。这是我先前提出的问题的后续问题,因此您可以查看有关项目here的更多信息。

尽管我通常可以从类型文件中提取函数,但是我不能提取为空或仅由接口组成的接口或名称空间。我已通过为每个接口创建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智能感知与类型接口一起使用。这是一张解释我想要的图像(圆圈内的两行):

enter image description here

javascript interface visual-studio-code intellisense .d.ts
3个回答
5
投票
所以我能够使用JSDoc解决问题

test.d.ts

export namespace test { export interface ITest { foo: string; bar: number; } }

test.js

/** * @type {import("./test").test.ITest} */ let x; x.
并且,智慧现在就起作用

Working intellisense

我发现的另一件事是,如果您将jsconfig.json与]相加>

jsconfig.json

{ "compilerOptions": { "checkJs": true } }
您的智慧将进一步提高

Better intellisense

更新-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.


5
投票
我认为这里可能存在概念上的误解,这是您的问题所在。听起来您希望接口

在运行时


1
投票
© www.soinside.com 2019 - 2024. All rights reserved.