TypeScript内部模块跨多个文件

时间:2012-10-08 18:06:37

标签: typescript

在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"/>

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

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

2 个答案:

答案 0 :(得分:6)

首先,如果使用

一次编译两个文件
tsc Animal.ts Dog.ts
一切都会好的。编译Typescript文件时,需要让编译器知道实际构成程序的文件。这可以使用带有///的源引用或通过向编译器提供所有文件来完成。这与其他语言(例如java)略有不同,后者编译为中间表示并且具有CLASSPATH的概念,其中搜索属于该程序的其他文件。

答案 1 :(得分:2)

///引用是必要的,因为编译器需要知道以某种方式定义Animal的位置。如果没有告诉它在哪里看,它无法知道它是什么源文件。

我不确定这本身是一种最佳实践(需要了解更多关于你的应用程序的内容)但我不认为这是一种反模式,所以我认为你可以自由地做到这一点。 TypeScript中的模块是故意开放的,以允许这种模式。