5

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

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

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

4

2 回答 2

6

首先,如果你一次编译这两个文件

tsc Animal.ts Dog.ts

一切都会好起来的。编译 Typescript 文件时,需要让编译器知道哪些文件实际上构成了程序。这可以通过使用源引用///或通过向编译器提供所有文件来完成。java这与其他语言(例如CLASSPATH.

于 2012-10-08T18:31:33.533 回答
2

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

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

于 2012-10-08T18:11:15.767 回答