【问题标题】:How to slowly move to / migrate to TypeScript in an existing JavaScript system如何在现有 JavaScript 系统中慢慢迁移到/迁移到 TypeScript
【发布时间】:2015-12-12 13:21:00
【问题描述】:

我们已经有一个 JavaScript 系统。

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

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

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

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

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

【问题讨论】:

    标签: typescript


    【解决方案1】:

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

    最好确保您的 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;
    }
    

    我希望这会有所帮助。

    【讨论】:

    • 谢谢史蒂夫!是的,这有帮助,很高兴知道选项是什么。问题是,我们现在添加了很多特定的代码,而大部分可重用的代码已经编写好了;很容易证明在新事物上尝试打字稿是合理的,而不是在重写测试模块时。但这意味着要编写很多定义。那么有没有办法简单地导入一个 JS 文件,让 TypeScript 至少知道某些函数存在?
    • 您可能会发现,如果您将 JavaScript 粘贴到 TypeScript 文件中,编译器将能够为您推断所有类型,但您通常会发现您的 JavaScript 包含一些需要修复的不兼容问题。
    【解决方案2】:

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

    http://hardcodeded.blogspot.jp/2013/02/mostly-painlessly-migrating-3d-game.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-15
      • 2012-06-04
      • 2015-10-20
      相关资源
      最近更新 更多