【问题标题】:Sharing classes between multiple TypeScript files using Node.JS Tools for Visual Studio使用 Node.JS Tools for Visual Studio 在多个 TypeScript 文件之间共享类
【发布时间】:2015-07-11 02:56:26
【问题描述】:

我目前正在使用 Node.JS Tools for Visual Studio (NTVS) 编写一个用 TypeScript 编写的 Node.JS 项目。我的项目中有一些类和枚举分布在 3 或 4 个文件中。我现在正在尝试使用我的主应用程序文件中这些文件中定义的类。从我之前使用 Node 的工作中,我知道如果我使用文本编辑器和命令行编译器,我通常需要一个 require 调用来导入其他文件/类。但是,如果我在我的项目中打开任何 TypeScript 文件并开始键入在不同文件中定义的类的名称,Visual Studio 会显示类名称及其成员的 IntelliSense 自动完成功能。这让我认为 NTVS 和/或 TypeScript 配置会自动使我的所有类在项目范围内可用。但是,如果我单击“运行”按钮,则会将错误打印到控制台,因为 Node 在运行时找不到引用的类。

这种行为让我相信 IntelliSense 实际上并没有告诉我这些类是可用的,只是告诉我它们存在(这看起来很奇怪)。如果我在文件顶部添加require 调用,并使用导入的值而不是原始类名,Node 会找到该类,我可以在我的代码中使用它。但这带来了两个问题:

  • 我必须想出一个新名称,用于将类导入其中的变量。如果我使用原始名称 require() 它,Visual Studio 会显示错误,指出标识符是重复的,因为它似乎认为原始类在项目范围内可用。
  • 我在使用类时没有自动完成或类型检查。这几乎违背了使用 TypeScript 的目的。

那么,进行此导入的正确方法是什么?有没有办法让我的所有课程在全球范围内可用?如果没有,我需要什么导入语句?

【问题讨论】:

    标签: node.js visual-studio typescript ntvs


    【解决方案1】:

    这种行为让我相信 IntelliSense 实际上并没有告诉我这些类是可用的,只是告诉我它们存在

    除非您有顶级 importexport 声明,否则该文件被视为 全局 模块并且在项目范围内可用:http://basarat.gitbooks.io/typescript/content/docs/project/modules.html 在 node.js 中,全局模块将在运行时不起作用

    您应该使用import/export 使用文件级模块并使用--module commonjs 进行编译

    【讨论】:

    • 如果我导出所有类,然后像这样导入它们:var TestClass = require('test-class.js').TestClass;,我会丢失 IntelliSense,因为我是从 Visual Studio 无法跟踪的导入中获取的。我的问题主要是关于在保留 IntelliSense 和调试功能的同时导入类。
    • 没关系——我想通了!我一直在使用 var 进行导入,而不是您推荐的 import。它现在似乎可以工作了——谢谢!
    猜你喜欢
    • 2017-05-29
    • 1970-01-01
    • 1970-01-01
    • 2021-09-18
    • 1970-01-01
    • 2016-08-31
    • 2015-08-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多