TypeScript内部模块跨多个文件

Kla*_*Nji 5 typescript

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

module Animals
{
    export class Animal { }    
}
Run Code Online (Sandbox Code Playgroud)

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

module Animals
{
    export class Dog extends Animal { }
}
Run Code Online (Sandbox Code Playgroud)

当前范围中不存在名称"Animal",是我在类定义Dog中得到的错误.

将以下行添加到Dog.ts

/// <reference path="Animal.ts"/>
Run Code Online (Sandbox Code Playgroud)

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

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

Val*_*tin 6

首先,如果您使用一次编译两个文件

tsc Animal.ts Dog.ts
Run Code Online (Sandbox Code Playgroud)

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


小智 2

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

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