Javascript 从Typescript编译中排除引用?

Javascript 从Typescript编译中排除引用?,javascript,reference,typescript,build-script,Javascript,Reference,Typescript,Build Script,我有一个有点奇怪(但在我看来是合理的)场景 我有一个网站,移动应用程序,可能还有一个用Javascript编写的web服务器。我拥有大量的功能,这些功能在所有这些系统之间共享。这些共享内容包括模型、存储库、业务逻辑等 如果我们排除web服务器位,因为这是未来的想法,则web应用程序具有如下目录结构: app |- assets |- models |- services |- migrations |- view-models |- views |- descriptors /// <r

我有一个有点奇怪(但在我看来是合理的)场景

我有一个网站,移动应用程序,可能还有一个用Javascript编写的web服务器。我拥有大量的功能,这些功能在所有这些系统之间共享。这些共享内容包括模型、存储库、业务逻辑等

如果我们排除web服务器位,因为这是未来的想法,则web应用程序具有如下目录结构:

app
|- assets
|- models
|- services
|- migrations
|- view-models
|- views
|- descriptors
/// <reference path="Customer.d.ts" />
/// <reference path="Order.d.ts" />
/// <reference path="Product.d.ts" />
现在,这些应用程序分为两个部分,核心部分和ui部分,核心部分是可重用的东西,如
模型、服务、迁移
,ui东西只用于该应用程序,该应用程序将包括
视图模型、描述符
(如果您想知道视图都是html,资产是css、图像等)

在我采用typescript之前,我有一个构建脚本,它基本上会将所有核心文件组合在一起并缩小它们。然后它会将所有UI文件组合在一起并缩小它们。这样,在移动应用程序中,我就可以使用
我的app.core.min.js
,每个人都很高兴,我正在重用所有可重用的组件但是我不需要ui的东西,因为移动ui与主web ui完全不同,web服务甚至没有ui

所以 在解释了上下文之后,让我们回到当前的Typescript问题。目前,Typescript文件是由
tsc.exe
(版本0.83)通过构建脚本编译的,构建脚本只是包装了交互

因此,在新的Typescript世界中,结构现在有一个参考文件夹,如下所示:

app
|- assets
|- models
|- services
|- migrations
|- view-models
|- views
|- descriptors
|- references <- NEW ONE!
app
|-资产
|-模型
|-服务
|-迁移
|-视图模型
|-观点
|-描述符

|-参考您可以通过为您的TypeScript文件生成定义文件来实现这一点:

tsc --declaration FileName.ts
在构建脚本中,对每个TypeScript文件执行此操作,并使用生成的FileName.d.ts作为引用,而不是FileName.ts

我有以下文件:

-BusinessObjects
--Product.ts
--Customer.ts
--Order.ts
--BusinessObjects.d.ts
BusinessObjects.d.ts如下所示:

app
|- assets
|- models
|- services
|- migrations
|- view-models
|- views
|- descriptors
/// <reference path="Customer.d.ts" />
/// <reference path="Order.d.ts" />
/// <reference path="Product.d.ts" />

输出仅引用客户和订单,不包括产品。当我直接在BusinessObjects.d.ts文件中引用*.ts文件时,组合输出确实包含了不需要的文件。

将对此进行研究,您是否可以生成一个大的声明文件,因为加载临时类型脚本似乎很麻烦脚本,然后将它们作为引用包含进来,以将实际类型的脚本文件编译为javascript。在这里回答我自己的问题,当使用out和多个arg时,您可以生成单个大型描述符。@Grofit您是如何从多个输入生成合并的引用文件的?当我尝试
tsc--output refs.d.ts--declarati在file1.ts file2.ts上,它创建了一个包含多个文件的输出目录。我做了
tsc.exe--declaration--out我的组合文件js…
我只是依靠原始调用,所以它也会输出描述符(因此输出应该是
my-combined-file.js,my-combined-file.d.ts
,因为这对于在组件之间提供代码契约非常有用。但是我意识到同样的问题也存在,因为描述符包含了引用中的所有内容,然后它就变成了第22条陷阱,没有引用,我无法构建代码,一个d如果我想引用d.ts文件,我需要为它们的存在构建代码:(.可能的重复-尽管我认为您最好使用模块加载器,而不是摆弄所有这些文件并组合其中一些文件。我使用LabJS(或YepNope)根据客户机/平台的不同,稍后加载组合内容时,构建脚本和应用程序相当复杂,但我已将其稀释为上面提到的一个简单问题。您是对的,它基本上是您链接到的问题的更详细版本。此处生成的代码还用作其他人的合同,用于为系统创建插件,所以我不仅为运行时生成这些文件,也为第三方合同生成这些文件。我认为上面的链接问题与那个问题类似。不过,所有这些都像是编译器在--out参数上进行大容量包含,而不仅仅是包含传递的文件的解决办法。有人知道我它在编译器中被处理,正如我记得读到的那样,如果你有一个引用另一个文件的文件,并且你构建了一个单独的文件,那么没有引用被包含,但是如果你对--out标志做同样的操作,它将包含这两个。