[英]Ambient declaration styles and modules
有人正在使用Backbone.d.ts编写Backbone应用程序。 我想讨论两个用例。
对于阵营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上工作。
原始讨论在这里,它已被移入工作项:
这不能仅使用一个.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.