首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TypeScript:多文件class+module合并的替代方案

TypeScript:多文件class+module合并的替代方案
EN

Stack Overflow用户
提问于 2014-06-30 17:58:54
回答 1查看 1.3K关注 0票数 2

在我们已经存在的代码库中,我们使用JavaScript的“类是函数和函数是对象”的方面来进行命名空间。

例如,假设我们有一个名为Foo的类,它包含一个名为Bar的类。

Foo是一个全局导出的对象(即,它存在于window.Foo中),而window.Foo.Bar是Bar的构造函数。(我认为公平地说,这是一种常见的JavaScript模式)。

确实,此模式创建了一个定向依赖项。Foo必须在Bar之前加载。我们使用不符合AMD协议的异步模块加载器stealjs来完成这一任务。由于这个原因,我们不能使用类型记录的内置导入/导出AMD代码生成。至少,直到我们做了几个星期的苦差事才能将整个代码库移植到需求。

为了在TypeScript中匹配这种模式,我们讨论了一个名为Foo的类,以及一个名为Foo的模块。

代码语言:javascript
复制
class Foo {
    /* Foo's properties */
}

module Foo {
    export class Bar {
    /* Bar's properties */
    }
}

这是合法的TypeScript,它编译成上面描述的JavaScript情况: Foo类对象将包含Bar类对象作为其"Bar“属性。Foo模块被称为与Foo类合并,Bar被称为内部类。

但是,如果我简单地将这两条语句分离到单独的文件中:

代码语言:javascript
复制
// Foo.ts
class Foo {
    /* Foo's properties */
}

// Foo/Bar.ts
module Foo {
    export class Bar {
    /* Bar's properties */
    }
}

这不再是合法的TypeScript,也不编译。1

这对我们来说是个大问题,因为我们不会将所有内部类声明都放入一个文件中。据我所知,这其实是没有解决办法的。我们只需污染全局命名空间,不能将内部类与名称空间合并。

如果我们使用内置于导入/导出语义中的TS,那么这个问题就不会出现,但我们不会出现,因为上面描述的原因。将所有东西移植到requirejs上现在还没有摆在桌面上。考虑到我们的情况,您认为解决类-模块合并限制的最佳策略是什么?

1

EN

回答 1

Stack Overflow用户

发布于 2014-11-05 16:19:05

您可以切换到require.js AMD片在一次而不是重写所有的一切在一次。实际上,最简单的方法是依赖于类型记录的内置AMD支持,因为它自动化了许多您需要做的工作,而且TypeScript中的导出和导入语法非常容易使用。您没有在TypeScript中添加导出或导入语句的文件按当前的情况构建,使用导出/导入的文件成为它们的模块。这有一点学习曲线,因为您将需要添加一个需求配置,并开始使用require(['mytsamd'], function (mytsamd) { /* do stuff with mytsamd */ })模式(或将其转换为类似于Q.js的承诺)在需要引用AMD对象的非类型记录文件中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24496134

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档