繁体   English   中英

环境声明样式和模块

[英]Ambient declaration styles and modules

有人正在使用Backbone.d.ts编写Backbone应用程序。 我想讨论两个用例。

  1. 使用AMD加载器创建骨干应用程序(或者我也考虑使用CommonJS)
  2. 使用普通JS创建骨干应用程序

对于阵营1中的人员,必须将骨干模块定义为外部模块,以便能够导入模块并将其包含在define()包装器中。

对于阵营2中的人,必须将骨干模块定义为内部模块,以便使用智能感知而不需要使用import语句/ define()包装器。

问题:是否有其他方法来定义模块,以便在两种情况下都可以使用它?


我真的不想创建一个叉子,这样你就可以拥有它

// required for those using import (1)
declare module "Backbone" { 

要么

// required for those not using import (2) and backbone already exists in the global scope
declare module Backbone {

并且仍然能够与您的代码/ intellisense相处。

我已经使用TypeScript团队提出了这个问题,他们已经打开了一个工作项。

我提议如果你使用...编写所有模块

module MyModule {
}

... wrapper,如果你将模块标志发送给编译器,它应该剥离模块声明,如果它与文件名匹配。 这样你就可以编写一个模块,可以在没有修改的情况下编译为在web,CommonJS或AMD上工作。

原始讨论在这里,它已被移入工作项:

http://typescript.codeplex.com/discussions/401397

这不能仅使用一个.d.ts文件来完成,因为编译器需要知道您用于主干的模块系统类型,以便知道要生成什么类型​​的代码。 您可以在单个文件中混合和匹配内部和外部模块,并且无法正确猜出您用于主干的哪个。

您可能能够使用interface声明来实现它,以便您可以在一个地方声明大多数内容并且具有引用该内容的“backbone-internal.d.ts”和“backbone-external.d.ts”文件通用声明文件,但您可以在多大程度上依赖于API的表面区域。

TL; DR:Camp 1和Camp 2不是互斥的,即使在同一个文件中也是如此。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM