【发布时间】: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 属性的 <script> 标记),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