gpt4 book ai didi

javascript - 组成 Type Script 项目的多个文件

转载 作者:搜寻专家 更新时间:2023-10-30 20:30:44 24 4
gpt4 key购买 nike

最近我一直在使用 TypeScript,一切都很好,我真的非常喜欢它......让 JavaScript 再次可用! :)

我们尝试遵循与任何 .net 项目背后相同的想法,例如每个类/接口(interface)一个文件

module Infrastructure {
export interface IBaseViewModel {
addOrRemoveClass(selector: string, className: string);
}
}

我们遇到的问题是 - 没有包含所有依赖文件?在运行时。

如果您查看这个文件,它是我们应用程序的主要入口点,我会在创建新的 ViewModelBuilder 时遇到未定义的错误

module Infrastructure {
export class Fusion {
constructor() {
this.vmBuilder = new ViewModelBuilder();
this.setApplicationDefaults();
this.start();
}

private vmBuilder: IViewModelBuilder;

private start() {
this.vmBuilder.process();
}

private setApplicationDefaults() {
$.pnotify.defaults.styling = "jqueryui";
$.pnotify.defaults.history = false;
$.pnotify.defaults.auto_display = false;
}
}
}

在文件的顶部我们有

/// <reference path="../Typings/jquery.d.ts" />
/// <reference path="ViewModelBuilder/ViewModelBuilder.ts" />
/// <reference path="ViewModelBuilder/IViewModelBuilder.ts" />

还有 ViewModelBuilder

module Infrastructure {

export class ViewModelBuilder { }
}

所以问题是 - 继续前进的最佳方式是什么?我们怎样才能使其他类声明起作用?我们的项目将大幅增长,我们可能有 100 个 View 模型来表示每个 View (该项目是从 Windows 窗体到 Web 的转换)

任何帮助都会很棒,因为我们真的需要克服它并继续前进! :)

最佳答案

我写了关于 getting the right set up for TypeScript其中的一个想法会对您有所帮助 - 我最初是从 Mark Rendle 那里得到这个想法的。

想法是创建一个名为 references.ts 的文件,并在其中列出所有依赖项。有点像这样:

/// <reference path="modulea.ts" />
/// <reference path="moduleb.ts" />
/// <reference path="modulec.ts" />
/// <reference path="moduled.ts" />
/// <reference path="modulee.ts" />

然后您可以在所有 TypeScript 文件的顶部简单地引用此文件:

/// <reference path="references.ts" />
module ModuleA {
export class MyClass {
doSomething() {
return 'Hello';
}
tester() {
var x = new ModuleB.MyClass();
}
}
}

references.ts 文件的作用类似于 .NET 项目的 References 文件夹。

另一个建议,与此设置一起工作得很好,是使用 --out 标志编译单个 JavaScript 文件,从 app.ts 开始. TypeScript 编译器遍历所有依赖项并为所有生成的 JavaScript 计算出正确的顺序。

tsc --out final.js app.ts

与在任何地方手动引用特定文件相比,此策略将更好地适应您的程序。

关于javascript - 组成 Type Script 项目的多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15335474/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com