javascript - Visual Studio 2019 Javascript Intellisense 无法用于添加到在 ASP.NET WebForms 项目中的另一个脚本中定义的对象的属性
问题描述
虽然我已经测试了许多变体,但我在这个问题上没有成功,而且由于我对 Javascript 的了解有限,我现在没有想法了。因此,我将尽可能简要地介绍它,从最初的期望结果开始,如有必要,随着建议的到来/讨论的进行而发展它,希望有人能对此有所了解。这旨在应用于一个相对较大的项目,在该项目中缺乏 IntelliSense 会导致生产力降低。
我将 Visual Studio Community 2019 16.6.0 与 .NET Framework 4.8.03761 一起使用,并且报告称 TypeScript 3.8 用于 IntelliSense。
为简单起见,我通过创建一个全新的 ASP.NET Web 应用程序 (.NET Framework) WebForms 项目来复制它,然后:
- 创建了具有以下内容的“\Scripts\tools.js”:
var Tools = {
tool1: 'tool no. 1',
tool2: 'tool no. 2'
}
- 在我放置在 head 元素中的
Site.Master
标记中。<script src="Scripts/tools.js"></script>
也是一个ContentPlaceHolder
即将使用的。 - 在
About.aspx
添加了这个:
<asp:Content ID="HeadContent" ContentPlaceHolderID="cphHead" runat="server">
<script type="text/javascript">
///<reference path="Scripts/tools.js" />
Tools.extraTool = 'extra tool';
console.log(Tools.tool1);
console.log(Tools.extraTool);
</script>
</asp:Content>
实际项目的设计是这样的:现有工具在一个专用的经典“text/javascript”.js 文件中,并用于其他脚本和网页。但它们也被扩展了新工具,特别是针对特定页面的需求,在这些页面的标记中。它们也被后端/控件引用,因此使用 js 模块 (ES2015) 方法进行重构并不是直截了当的,并且存在错误风险。
示例中发生的情况:如下图所示,IntelliSense 忽略了添加的属性(静态的,正如我理解的那样)。在运行时,extraTool
正确显示(参见第二张图片),页面上没有错误。
主要问题:在工具对象上添加任意数量的属性/函数后,如何通过 IntelliSense 实现完整的成员建议?
当然,如果在页面中我扩展类然后“实例化”一个新对象,我会得到所有成员的建议,但我不希望这样做,因为它在应用于项目时会产生太多开销。基本上,我想在整个项目中巧妙地命名 JS 工具,而现有代码的开销/更改最少。
问:这需要我创建一个 tools.intellisense.js 文件或一个 .d.ts 文件吗?这是要走的路吗?
我尝试过的一些事情:
- 使用类并从中创建新对象;
- 向原型添加新属性;
- Object.getPrototypeOf();
- 对象.defineProperty();
- 扩展类并归因于自身:);
- ES2015 模块、命名空间;
- 添加JSDoc;
- 重新启动 VS / IIS Express;
也许这是一些简单/基本的事情,但它让我望而却步。
解决方案
推荐阅读
- groovy - Spock:方法未被识别为调用
- python - zipfile 标头语言编码位在 Python2 和 Python3 之间设置不同
- c++ - 错误 C2131:表达式在 VC 2017 中未计算为常量
- intellij-idea - 如何在“查找路径”功能中排除文件掩码中的某些文件?
- python - xonsh 中循环遍历文件行的最佳方法是什么?
- ios - Ipad 锁定/关闭后重新启动 ios 应用程序
- r - 计算多少行总和为零:导入数据的问题?
- firebase - 如何在 Firebase 上使用相同的匿名用户?
- rust - 如何将值从 Drop::drop() 的参数中移出?
- android - Android:有一个非侵入式活动透明/不可点击的活动正在运行