【问题标题】:How to enforce WebStorm not to ignore TypeScript insights in JavaScript files?如何强制 WebStorm 不要忽略 JavaScript 文件中的 TypeScript 洞察力?
【发布时间】:2022-08-03 17:17:55
【问题描述】:

我正在使用 WebStorm 2022.2(内部版本 #WS-222.3345.108)。在一个空的新项目中,我将ethers.js 项目添加为a custom third-party library。我已将以下 HTML 文件添加到项目中:

<!DOCTYPE html><html lang=\"en\">
<head>
    <title>Test</title>
    <script type=\"text/javascript\">
        /** @type {Contract} */
        let contract;
        /** @type {ContractTransaction} */
        let tx = contract.myMethod();
        tx.wait();
    </script>
    <script src=\"index.js\"></script>
</head>
<body></body></html>

在嵌入脚本中,WebStorm 确实为类型由 JSDoc 注释的变量正确提供了code-completion 工具;此外,它们的所有相应字段和方法都由代码完成正确呈现,适当着色,并且Ctrl-点击标记指向声明点(其中大部分位于 .ts 文件中);甚至 ContractTransaction,它是一个 TypeScript 接口,一个 JavaScript 所缺乏的 TypeScript 概念,它的工作原理就像一个魅力。

WebStorm 在 HTML 文件中做得很好,但是当将相同的代码放入外部 JavaScript 文件时(如上面 HTML 中的第二个带有 src 属性的 &lt;script&gt; 标记),WebStorm 完全忽略了 TypeScript 声明!

index.js 文件中的上述无知(忽略 TypeScript 声明)会导致以下问题:

  • WebStorm 认为 Contract 的注释类型(在第 1 行)在 contracts\\lib\\index.js 文件中声明;忽略corresponding TypeScript declaration 会导致WebStorm 无法感知到该类具有\"index signature\",这允许其对象平静地暴露任何不可预见的属性;因此,它在第 4 行论证:
    Unresolved function or method myMethod()

  • WebStorm 在第 3 行抱怨 ContractTransaction 类型注释,争论:
    Unresolved variable or type \'ContractTransaction\'(虽然它在 HTML 文件中正确发现了 the corresponding declaration!)

  • 奇怪的是,WebStorm 在第 5 行正确识别了the declaration of the wait() method;而在上一篇文章中,WebStorm 辩称它找不到ContractTransaction 的类型!! (仅对我们的案例正确且无趣,抱怨Promise returned from wait is ignored

那么,如何强制 WebStorm 在外部 JavaScript 文件中使用相关的 TypeScript 洞察(由 JSDoc 类型注释表示)(让它考虑 TypeScript 洞察,就像它在 HTML 文件上所做的那样)?

  • 如果我将contracts/src.ts/index.ts 复制到一个新项目,它对我来说很好;您是否尝试从索引中排除 contracts\\lib\\index.js 和其他生成的内容?
  • @lena 感谢您的回复;这是一个聪明的主意。如果我将相应的 TypeScript 文件复制到项目中,它同样对我有用;但是,将文件复制过来,听起来并不乐观:主要是因为它们需要作为项目文件添加(虽然它们只是一些第三方库文件,而不是项目文件,但它们合理地应该保持为“第三方库\"),其次,每当库更新时,复制过程的繁琐工作都应该重新完成。
  • @lena 另外,如何按照您的建议从索引中排除“生成的东西:包括偏转的.js 文件”(因为它们已被添加为custom third-party libraries)? “设置|目录”上的表格似乎与第三方库没有任何关系,有什么想法吗?
  • 只是不要将这些文件包含在库中,仅包含 .ts 文件
  • @lena WebStorm 似乎并不关心 TypeScript 文件在图书馆.js 文件有任何影响(即使通过单独指定.ts 文件,as you\'ve suggested),它只关心文件\"复制\"作为项目文件!这就像缺少一个基本特征;对于 WebStorm,这是一种耻辱!

标签: javascript typescript webstorm jsdoc


【解决方案1】:

如果你得到奇怪/不正确的类型完成,那可能是因为 WebStorm 正在将类型定义本身下载到不同的目录,这有时是包的错误版本。

您可以通过打开 IDE 的注册表 (ctrl+alt+/) 并禁用 typescript.external.type.definitions 来禁用此功能。这应该强制 WebStorm 仅使用您实际安装的包中的类型定义。

【讨论】:

    猜你喜欢
    • 2020-04-12
    • 1970-01-01
    • 2013-05-26
    • 2019-01-09
    • 2010-10-11
    • 2016-06-03
    • 2021-08-06
    • 2015-02-18
    • 1970-01-01
    相关资源
    最近更新 更多