【问题标题】:TypeScript internal modules across several files跨多个文件的 TypeScript 内部模块
【发布时间】:2012-09-29 00:32:25
【问题描述】:

假设在 Animal.ts 中使用 TypeScript 进行以下类定义:

module Animals
{
    export class Animal { }    
}

如果我想在单独的文件中创建 Dog 类,请在 Dog.ts 中使用以下代码:

module Animals
{
    export class Dog extends Animal { }
}

当前范围内不存在名称“Animal”,这是我在类定义 Dog 中遇到的错误。

将以下行添加到 Dog.ts

/// <reference path="Animal.ts"/>

修复了编译错误,但如果两个类都在同一个模块中定义,为什么这是必要的?

换句话说,我希望模块声明跨越文件,每个类或接口定义在它们自己的文件中。这甚至是最佳做法吗?

【问题讨论】:

    标签: typescript


    【解决方案1】:

    首先,如果你同时编译这两个文件

    tsc Animal.ts Dog.ts
    

    一切都会好起来的。在编译 Typescript 文件时,需要让编译器知道哪些文件实际上构成了程序。这可以使用带有/// 的源引用或通过将所有文件提供给编译器来完成。这与 java 等其他语言有些不同,后者编译为中间表示,并具有 CLASSPATH 的概念,可以在哪里搜索属于程序的其他文件。

    【讨论】:

      【解决方案2】:

      /// 引用是必要的,因为编译器需要知道 Animal 是在哪里定义的。如果你不告诉它去哪里看,它就无法知道它在哪个源文件中。

      我不确定这本身是否是最佳实践(需要更多地了解您的应用程序),但我几乎不认为这是一种反模式,所以我认为您可以随意这样做。 TypeScript 中的模块特意是开放式的,以允许这种模式。

      【讨论】:

      • 谢谢。我的应用程序包含 40 多个脚本文件,每个文件都包含一个使用原生 JavaScript 原型的“类”定义。我想保持相同的结构,但将所有内容都转换为 TypeScript。
      • 但事实是,必须导出 Animal 才能正常工作?你不能有仅限内部的可见性?
      猜你喜欢
      • 2015-09-11
      • 1970-01-01
      • 2013-09-25
      • 2015-07-15
      • 1970-01-01
      • 1970-01-01
      • 2014-05-01
      • 2013-12-10
      • 2014-02-11
      相关资源
      最近更新 更多