在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"/>
修复了编译错误但是为什么这是必要的,如果在同一个模块中定义了两个类?
换句话说,我希望模块声明跨越文件,每个类或接口定义都在自己的文件中。这是最佳做法吗?
答案 0 :(得分:6)
首先,如果使用
一次编译两个文件tsc Animal.ts Dog.ts
一切都会好的。编译Typescript文件时,需要让编译器知道实际构成程序的文件。这可以使用带有///
的源引用或通过向编译器提供所有文件来完成。这与其他语言(例如java
)略有不同,后者编译为中间表示并且具有CLASSPATH
的概念,其中搜索属于该程序的其他文件。
答案 1 :(得分:2)
///引用是必要的,因为编译器需要知道以某种方式定义Animal的位置。如果没有告诉它在哪里看,它无法知道它是什么源文件。
我不确定这本身是一种最佳实践(需要了解更多关于你的应用程序的内容)但我不认为这是一种反模式,所以我认为你可以自由地做到这一点。 TypeScript中的模块是故意开放的,以允许这种模式。