这个 VSCODE 智能感知是从哪里来的?

Posted

技术标签:

【中文标题】这个 VSCODE 智能感知是从哪里来的?【英文标题】:Where is this VSCODE intellisense coming from? 【发布时间】:2018-12-04 16:24:09 【问题描述】:

在 VSCODE 中,我看到以下智能感知:

在探索node_modules/sanctuary/index.js 时,我找到了一个函数toMaybe,但由于它们不匹配,因此定义似乎不是来自这里

//# toMaybe :: a? -> Maybe a
//.
//. Takes a value and returns Nothing if the value is `null` or `undefined`;
//. Just the value otherwise.
//.
//. ```javascript
//. > S.toMaybe (null)
//. Nothing
//.
//. > S.toMaybe (42)
//. Just (42)
//. ```

这与通常显示如下的其他功能形成对比:

两个问题:

    接下来我应该看哪里? 如何像这样记录我自己的函数?

更新:

Lukas Bach 和 ippi 指出,Sanctuary.Static.toMaybe<A>(p: A): Maybe<A> 的一部分来自自动类型获取功能。

即使从~/Library/Caches/typescript/2.9/node_modules/types-registry 中删除所有@types,我仍然看到一些文档。

我也无法在@types/sanctuary/index.d.ts 文件或@types 目录中的任何位置找到文本toMaybe :: a -> Maybe a

【问题讨论】:

【参考方案1】:

编程语言 TypeScript 是 JavaScript 的超集,允许在函数和变量上定义正确的类型。 TypeScript 可以编译为 JavaScript,它会删除所有类型注释,并且可以在编译期间导出单独的类型定义文件 (*.d.ts)。现在,TypeScript 类型定义通常直接在模块存储库本身中或作为 DefinitelyTyped 存储库的一部分为 JS 模块提供。

要为您自己的代码获取此类类型注释,您可以首先在 TypeScript 中编写代码,也可以自己编写其他自定义类型定义文件。

这不是编写类型定义的唯一方法,但却是目前最突出的一种。

编辑:好的,我并没有真正研究你之前提到的包。但是我试过了,这是IntelliSense注解,它给了我。

这似乎来自 TS 输入:

toMaybe<A>(p: A | null | undefined): Maybe<A>;

这些类型位于https://www.npmjs.com/package/@types/sanctuary。

【讨论】:

我考虑过这一点,我无法在 sanctuary 项目中找到对 TypeScript 定义的任何引用。我正在尝试跟踪从智能感知到包含文档的文件的路径,以便我可以了解 vscode 是如何创建它的。 自动类型获取在 vs-code 中。您可以在 vs 代码中按住 ctrl-click(或 alt 设置)toMaybe(或放置光标并单击 F12)并直接跳转到声明,在本例中为类型定义文件:sanctuary/index.d.ts#L197 或本地: :%localappdata%\Microsoft\TypeScript\2.9\node_modules\@types\sanctuary\index.d.ts(在 Windows 上)。如果你使用 npm-package 并且有匹配的 @types/packagename ,它将被安装和使用。 @types 即使类型定义是旧的并且不匹配也会安装(这可能是你的问题,看看声明文件是从 3 月开始的,但 sanctuary-maybe 是在 5 月更新的)。这实际上很常见,但原因通常是项目不使用类型开头和/或某些第三方添加了类型。 自动类型获取很有意义。我在全局node_modules 中有定义@types/sanctuary 的F12,其中包含toMaybe<A>(p: A | null | undefined): Maybe<A>;(我正在寻找的一半)但不包含toMaybe :: a -> Maybe a。我已经更新了 OP。 这些剩余的注释可以由运行时类型系统 sanctuary-def (npmjs.com/package/sanctuary-def) 生成。看起来它们生成的类型注释与您描述的类似 haskell 的类型注释完全一样。

以上是关于这个 VSCODE 智能感知是从哪里来的?的主要内容,如果未能解决你的问题,请参考以下文章

为啥称为“业务逻辑”?这个词是从哪里来的? [关闭]

这个哈希是从哪里来的? [复制]

这个 backBarButtonItem 又是从哪里来的呢?

什么是工业互联网?它从哪里来,要到哪里去?

人类的创造力是从哪里来的:4星|《三联生活周刊》2018年第46期

你好,你知道这个包裹是从哪里来的吗?包:flutter_gen/gen_l10n/gallery_localizations.dart