假设在 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 中的模块是故意开放式的,以允许这种模式。