首页 > 解决方案 > 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 项目来复制它,然后:

var Tools = {
    tool1: 'tool no. 1',
    tool2: 'tool no. 2'
}

<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正确显示(参见第二张图片),页面上没有错误。

脚本代码

result_at_runtime

主要问题:在工具对象上添加任意数量的属性/函数后,如何通过 IntelliSense 实现完整的成员建议?

当然,如果在页面中我扩展类然后“实例化”一个新对象,我会得到所有成员的建议,但我不希望这样做,因为它在应用于项目时会产生太多开销。基本上,我想在整个项目中巧妙地命名 JS 工具,而现有代码的开销/更改最少。

问:这需要我创建一个 tools.intellisense.js 文件或一个 .d.ts 文件吗?这是要走的路吗?

我尝试过的一些事情

也许这是一些简单/基本的事情,但它让我望而却步。

标签: javascriptasp.nettypescriptwebforms

解决方案


推荐阅读