跨多个文件的 TypeScript 内部模块



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

module Animals
{
    export class Animal { }    
}

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

module Animals
{
    export class Dog extends Animal { }
}

名称"动物"在当前范围内不存在,是我在类定义 Dog 中得到的错误。

将以下行添加到 Dog.ts

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

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

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

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

tsc Animal.ts Dog.ts

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

///引用是必需的,因为编译器需要知道以某种方式定义 Animal 的位置。它无法知道它在哪个源文件中,而无需您告诉它在哪里查找。

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

最新更新