似乎在编写Typescript时如何实际构造代码的信息几乎不存在。
我想在节点中创建一个服务器。它有外部依赖,如socket.io。服务器太大了,无法将它全部放在一个文件中(正如我想象的那样大部分时间都是如此)所以我想我会将它拆分。我希望将每个类放在一个单独的文件中,我希望能够在整个项目中使用它们,而不需要做一些疯狂的事情,如
import vector = require("vector.ts");
var vec = new vector.Vector();
我该怎么做?到目前为止,似乎我在两条战线上作战。当我得到tsc实际编译时,节点会在运行时抱怨,但是当我修改代码以便节点可以工作时,它就不会编译。
如果有人可以花时间逐步完成这一步,我会很感激。
答案 0 :(得分:35)
实际上你可以(现在):
file:class1.ts:
export class Class1 {
name: string;
constructor(name: string){
this.name = name;
}
}
file:class2.ts:
export class Class2 {
name: string;
}
合并模块文件:classes.ts:
export { Class1 } from "./class1";
export { Class2 } from "./class2";
消费文件:
import { Class1, Class2 } from "./classes";
let c1 = new Class1("Herbert");
let c2 = new Class2();
通过这种方式,每个文件可以有一个类(或接口)。在一个合并模块文件(classes.ts)中,您可以引用构成“模块”的所有实体。
现在,您只需要在单个模块文件上引用(导入)即可访问所有类。您仍然可以在文件之间进行简洁的划分。
希望这有助于任何人继续寻找。
答案 1 :(得分:8)
TypeScript中尚不支持多文件外部模块。
对于模块结构化建议,this page有很好的选项。特别是,如果每个文件只有一个类,则可以使用export =
,以便示例中的第二行代码只是var vec = new vector();
,这将是相当简单的。
答案 2 :(得分:0)
对于任何偶然发现此线程(例如我)的人,他们试图为外部模块声明创建一个桶文件,loretoparisi的答案就是解决之道。这是我的示例模块用例。我想为我正在编写的所有第三方声明创建一个桶形声明文件(index.d.ts
),但不想将其6 +模块声明放入同一文件中。这就是我所做的。
我有这样的文件夹结构:
src/
index.ts
示例index.ts
:
import WildEmitter from 'wildemitter';
import SomethingCool from 'somethingcool';
// ... rest of file
我将这样的文件夹结构转换为导入的第三方模块写入声明文件:
src/
index.ts
/types
index.d.ts
/modules
wildemitter.d.ts
somethingcool.d.ts
在我的src/types/index.d.ts
文件中,我有:
/// <reference path="modules/wildemitter.d.ts" />
/// <reference path="modules/somethingcool.d.ts" />
然后,我可以将模块声明保存在单独的文件中。
在src/types/modules/wildemitter.d.ts
中,我有:
declare module 'wildemitter' {
// declarations
}
希望这对某人有帮助!