- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我在 0.9.5 版中再次尝试使用 TypeScript,暂时搁置了它。
在我发现的新旧信息的混合体中,我想到一个项目中的所有 TypeScript 文件都将“隐式引用”彼此。
我不明白这是什么意思。我的一个理论是,这意味着每个文件都能够看到所有其他文件导出的所有函数、类等,所有这些都在全局范围内。 (如果这是真的,这听起来不像是个好主意。)
问题是,我不确定任何解释是否正确,因为 0.9.5 与 Visual Studio 的集成中似乎存在错误,因此它没有按照(某些)人们的预期进行。
我的测试是在 Visual Studio 2013 中创建的“带有 TypeScript 的 HTML 应用程序”项目,并通过项目模板页面中的链接安装了 TypeScript 插件。
我添加了第二个 .ts
文件,该文件导出了一个具有愚蠢名称的类:
export class Hedgehog {
spikes() {
return 100;
}
}
并且还添加了来自 DefinitelyTyped 的 knockout.d.ts
.
在主 app.ts
文件中,如果我尝试使用来自 app.ts
的类,VS 会给我智能感知错误:
var h = new Hedgehog(); // Could not find symbol Hedgehog
如果我尝试使用 ko
中的任何内容,它也会提示:
var five = ko.observable(5); // Could not find symbol ko
This issue complains that implicit referencing doesn't work并且有一条评论提示解决方案,即手动编辑项目文件。然而,那个人改变了他们项目的这一行:
<Import Project="$(VSToolsPath)\TypeScript\Microsoft.TypeScript.targets"
Condition="'$(Configuration)' == 'Debug'" />
对此:
<Import Project="$(VSToolsPath)\TypeScript\Microsoft.TypeScript.targets"
Condition="Exists('$(VSToolsPath)\TypeScript\Microsoft.TypeScript.targets')" />
然后他们显然很高兴(结果如何?!)
但我刚刚生成的项目已经看起来像第二个版本。我尝试完全删除条件:
<Import Project="$(VSToolsPath)\TypeScript\Microsoft.TypeScript.targets" />
然后我取得了一些进步。我现在在两个 .ts 文件中都有用于 Knockout 的智能感知,但我仍然无法使用我的 Hedgehog
类。我需要添加:
import otherFile = require('otherFile');
var Hedgehog = otherFile.Hedgehog;
这实际上是理想的。在我的主要 JavaScript 项目中,已经使用带有自制链接器的 commonjs 模块(类似于 browserify 或 webmake )所以我绝对不希望我所有的数千个导出被合并到一个巨大的全局范围(我我真诚地希望这不是预期的行为)。但我也使用第三方库,如 Knockout 和 jQuery,我只是将它们混合到全局范围中,以便它们像 DOM 一样可用于所有模块。所以我希望 .d.ts
被区别对待,并自动将它们的声明添加到所有模块的全局范围。
所以手工破解的最终结果是我得到了我想要的行为。但它会像 TypeScript 1.0 中那样继续吗?
我在 announcement post 上阅读:
With the previous improvements to the Visual Studio experience, we've moved to projects implicitly referencing the .ts files contained in the project. This cut down on having to explicitly reference your files in the project, bringing the experience much closer to C#. Unfortunately, it also did not work well when using the option to concatenate your output .js file.
We're continuing to improve this experience. Starting with 0.9.5, you can now add an _references.ts file to your project. This file will be the first passed to the compiler, allowing you more control over the order the generated .js file when used in combination with the Combine JavaScript output into file option (the equivalent of using the --out commandline option).
我无法从中得到任何东西!他们是说他们改变了行为但仅在组合 JS 输出文件时?还是他们在所有情况下都更改了它?如果有帮助,我没有在我的测试项目中启用“将 JavaScript 输出合并到文件中”选项。
最佳答案
项目中的所有 TypeScript 文件都隐式地相互引用。这基本上就像是在说它们全部一起传递给编译器,就好像您在命令行上指定了它们的所有名称一样。
但是,这仅发生在具有 TypeScriptCompile
的 Build Action
(请参阅属性窗口)的文件中。由于技术原因,这不是将 .ts 或 .d.ts 文件添加到项目时的默认设置,因此如果您希望文件被包含在项目上下文中。这就是为什么您的文件无法隐式看到 ko
的原因。
第二个问题是export
的使用。有关完整讨论,请参阅 Modules in TypeScript ,但简短的版本是,当您在顶层使用 export
时,包含的文件成为外部模块(正如您发现的那样),因此如果不使用 import
(同样如您所见)。这也是运行时行为。如果您希望对象进入全局范围,只需离开 export
关键字 - 当您不使用外部模块。
最后,是的,无论您是通过外部模块导入(import ko = require('ko')
)还是通过全局模块获取 JQuery 或 Knockout 等第三方库,您都可以混合搭配范围 ($.whatever
),只要它们的定义文件被编写为支持它,就像 knockout.d.ts
一样。
关于visual-studio - Visual Studio 对 TypeScript 文件的隐式引用应该如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21803257/
我经常使用 SSMS 查询数据和构建数据集,我的 IT 部门负责数据库管理。 最近我发现了 Azure Data Studio,我喜欢: 智能感知 源代码控制(例如使用 Git) 来自社区的扩展 SQ
我想根据我使用的 visual studio 版本编译不同的东西,比如 #if VISUAL_STUDIO_VERSION > 2015 eventH?.Invoke(this, EventArgs.
我们的开发团队计划从 visual studio 2005 升级到 visual studio 2010 -- 跳过 visual studio 2008。 大部分项目是VB ASP.NET项目,使用
我的Visual Studio 2015无法构建2010平台工具集。它说: The build tools for Visual Studio 2010 (v100) cannot be found.
我目前正在使用 Visual Studio 2015 来编程 ASP.NET Core 应用程序。我对安装 Visual Studio 2017 有以下疑问: 什么被认为是最佳实践和/或最干净的方法?
尝试从扩展和更新获取 Visual Studio 扩展时,出现以下错误:- 向 visualstudiogallery.msdn.microsoft.com/Services/VStudio/Exte
这个问题在这里已经有了答案: Can Visual Studio Code and VS 2012 be installed on same computer? (1 个回答) 关闭去年。 在安装了
作为标准安装的一部分,Visual Studio Code 带有一个名为“Monokai Dimmed”的颜色主题。 有没有办法将它移植到 Visual Studio 2015?我检查了社区主题( h
我想开始编程 CUDA。 我已经安装了 Visual Studio 2010 Express。 我还安装了 nVidia nSight Visual Studio。 而且我具备所有常见的先决条件(Ne
Visual Studio Community Edition是否可以使用Visual Studio Online帐户上的存储库? 我一直为包含在Online帐户中的Visual Studio Onl
我有一个我一直在开发的应用程序,但在 android studio 上遇到了问题。当我点击“build->run”然后选择我的设备时,应用程序永远不会在我的手机上运行(并且自动出现的android-s
我正在使用Visual Studio2010。我面临的一个问题是,当我创建一个新的Web项目时,Visual Studio将创建该项目,并且不会在解决方案资源管理器中显示其解决方案。 另一件事是,我想
我通读了这里的许多帖子,却找不到一个有效的明确答案。因此,在花了一些时间使它生效之后,我认为应该发布它。 问题:发布配置文件将建立在服务器上,但不会发布。 解: 确保已安装Microsoft Wind
我正在尝试使用Visual Studio 2012构建针对.NET 3.5的C++ CLI应用程序。 通过安装Visual Studio 2008,并指定v90平台工具集,我已经在一台机器上进行了这项
我在 Microsoft Visual Studios 2013 中有一个项目,我想在 Microsoft Visual Studios 2010 中打开它。有什么简单的方法吗?还是我必须在2010年
我想知道,如果我发送一个解决方案文件夹(它是用 visual studio C# 编写的),您可以在 visual studio for mac 中打开解决方案吗? 在visual studio 20
有没有办法在 Visual Studio Code 和 Visual Studio 中设置相同的快捷方式(而不必每次都手动更改它们)? 例如,我在 Visual Studio Code 中经常使用 A
我刚开始了解 Visual Studio Code。我想知道,我可以将 Visual Studio 替换为所有 .NET 开发相关的工作吗? 我可以节省 Visual Studio 许可的成本吗? V
我安装了具有有效许可证(Visual Studio 订阅)的 Visual Studio 2019 企业版(VS 2019 16.1.4),它运行良好。 突然之间,当我尝试打开项目或项目中的任何文件时
我一直在使用 Compass 编译 Windows 环境中的 sass 文件,无论是在命令行上还是使用 Compass-app 来查看目录。 我刚刚开始使用 Visual Studio(专业版 201
我是一名优秀的程序员,十分优秀!