32

我们已经有一个现有的 JavaScript 系统。

我们想做的事情: 我们想开始将 TypeScript 集成到当前系统中;我们不能只是将所有内容都迁移到 TypeScript。我们想慢慢开始用 TypeScript 编写一些新模块。

我们尝试了什么: 我们使用一种类似于 MODULE TypeScript 构造的模式来组织我们的 JS 代码。

我们尝试用 TypeScript 重写一个简单的类/对象并且成功了,但是我们在访问我们的代码中定义的 JS 函数时遇到了麻烦,在其他文件中。

遇到的问题: 我们必须创建虚拟接口,以及使用这些接口的虚拟函数等。

所以问题是:任何人都可以评论一下,将 TypeScript 慢慢集成到现有 JavaScript 系统中的最佳方法是什么。

4

2 回答 2

33

听起来你有一个明智的计划。以下是我的观察!

最好确保您的 TypeScript 依赖于您的 JavaScript,而不是在可能的情况下相反。这是因为使用 Visual Studio 工具重构 TypeScript 非常容易,但它不会重构调用 TypeScript 的 JavaScript。

您必须为需要从 TypeScript 调用的 JavaScript 部分编写定义文件。您需要平衡编写定义的成本与将 JavaScript 转换为 TypeScript 的成本。

如果您只调用一个函数,只需编写该函数的定义 - 在需要之前不要编写定义。这将降低调用旧代码的成本。

您也可以暂时使用该any类型来避免在 JavaScript 代码上调用任何内容。当您将文件转换为 TypeScript 时,您将获得更好的类型检查。这是一个“取决于”的决策点。与其花很多时间编写定义,不如以类型检查为代价来节省时间。

例如...

declare var MyExistingClass: any;

你现在可以打电话...

var example = new MyExistingClass.Anything();
example.anythingYouLike();

您必须作为一个团队决定这是否可以接受,或者您是否要编写定义:

declare class MyExistingClass {
    anythingYouLike(): void;
}

我希望这有帮助。

于 2012-11-12T19:47:41.753 回答
16

这是我们最近将大约 100,000 行 JavaScript 的 HTML5 游戏引擎迁移到 TypeScript 时遇到的问题。我们必须分阶段进行,首先将文件从 .js 重命名为 .ts 并从那里逐步进行。有兴趣的人可以在这里查看完整的描述:

http://hardcoded.blogspot.jp/2013/02/mostly-painless-migrating-3d-game.html

于 2013-02-15T08:53:02.873 回答