VSCode 仅在 Foo.js 在某处导入时通过相应的 Foo.d.ts 为 Foo.js 提供智能感知;如何在 Foo.js 本身中启用智能感知?
Posted
技术标签:
【中文标题】VSCode 仅在 Foo.js 在某处导入时通过相应的 Foo.d.ts 为 Foo.js 提供智能感知;如何在 Foo.js 本身中启用智能感知?【英文标题】:VSCode provides intellisense for Foo.js via a corresponding Foo.d.ts only when it’s imported somewhere; how to enable intellisense in a Foo.js itself? 【发布时间】:2020-11-23 21:18:19 【问题描述】:设置是一个“创建 React 应用程序”,带有以下 jsconfig.json
:
"compilerOptions":
"experimentalDecorators": true,
"baseUrl": "src"
,
"include": ["src"]
目录结构:
.
└── src
└── Components
└── Foo
├── Bar
│ ├── Bar.js
│ ├── Bar.d.ts
│ └── index.js
├── Foo.js
└── index.js
// React component `Foo` imports a component `Bar`:
import Bar from './Bar'
export function Foo(props)
//
// And gets full intellisense via `Bar.d.ts`:
type Props =
/** ... */
export declare function Bar(
props: Props
): React.FunctionComponent
但是Bar.js
本身并没有从它自己的Bar.d.ts
文件中获得智能感知,有没有办法解决它?我尝试了三斜杠指令 (/// <reference path="Bar.d.ts"/>
),但没有帮助。一些 JSDoc 有所帮助,但是有一个专门的声明文件并仍然使用 JSDoc 是没有意义的;它也可能只适用于 VSCode,这是不可取的:
export function Bar(
// When `type Props` is exported from the `.d.ts`:
/** @type import("./Bar").Props */ props
)
【问题讨论】:
VSCode 还允许你使用 JSDoc 来获取类型提示——我在纯 JS 项目中大量使用它,但我会说明你是否愿意使用 TS 定义文件,为什么不直接使用一路TS? @Jhecht 我确实是从 JSDoc 开始的——不记得我有什么智能感知问题(很久以前),但这就是为什么我开始使用声明文件来描述形状,在end 对我来说比 JSDoc 更好。我不想用细节来打扰你,但要为这个项目完全使用 TypeScript 是非常困难的,因为它会增加另一层我还没有准备好处理的复杂性。 【参考方案1】:自 2020 年 9 月起,这是打算 (source):
[...] “.d.ts 是 .js 的边车”没有受支持的场景。这里推荐的做法是使用 JS Doc 来编写你的类型注解。
关注 TypeScript 的发展,看看未来会不会发生变化。
【讨论】:
【参考方案2】:您可以像在 typescript 中一样使用 JSDoc 来定义类、函数和所有内容。
我做过的最好的用法之一是在文件connect.js file on Github 中。 我不想提交包含数据库凭据的文件。于是,我在 JSDoc 中定义了一个类、枚举等。
【讨论】:
以上是关于VSCode 仅在 Foo.js 在某处导入时通过相应的 Foo.d.ts 为 Foo.js 提供智能感知;如何在 Foo.js 本身中启用智能感知?的主要内容,如果未能解决你的问题,请参考以下文章